Ir al contenido

Utilidad de Tiempo

Utilidad de Tiempo

En Wired Code: extra.var_time_util

Coge un momento guardado en una variable y lo parte en trozos: el año, el mes, el día de la semana, la hora… Y aparte, unas cuantas variables que sirven para restar dos momentos y saber cuánto ha pasado entre ellos.

Una fecha, por dentro, es un número enorme: los milisegundos que han pasado desde 1970. Ese número no te sirve para nada tal cual — lo que quieres saber es si es lunes, o si han pasado tres días. Eso es lo que hace este complemento.

Va en la misma baldosa que la caja de la variable, no en la pila donde lo uses. Basta con compartir baldosa, no hace falta que quede justo encima.

En Elegir tipo dices de dónde sale la fecha:

Tipo De dónde sale el momento
Valor El valor de la variable, leído como milisegundos desde 1970
Fecha de creación Cuándo se creó la variable
Última actualización Cuándo se cambió por última vez

La caja tiene que poder darte ese dato: “Valor” pide una variable que guarde valor, y cada fecha, una variable que guarde esa fecha. Qué guarda cada tipo de variable está en la tabla de Edad de variable. Sobre un Eco, los tipos de fecha no producen nada: usa la variable original.

La ventana ofrece los tipos que admite alguna de las cajas de variable que haya en la baldosa; si no hay ninguna caja, salen los tres. El tipo que ya tenías guardado sigue saliendo siempre, aunque la caja no lo admita: en ese caso no brota ninguna variable.

Se llaman como la caja, el tipo, y la parte, todo separado por puntos. Si tu variable se llama entrada y eliges “Valor”, marcar “Día de la semana” te da entrada.value.day_of_week. El tipo se escribe así:

Tipo Se escribe
Valor value
Fecha de creación creation_time
Última actualización last_update_time

En los dos tipos de fecha brota una más, sin parte detrás —entrada.creation_time o entrada.last_update_time, según el tipo—, con el momento entero. Esa aparece siempre, marques lo que marques.

Crear subvariables, las diez partes del calendario:

En la ventana Se llama Qué te da
Milisegundos milliseconds_of_seconds 0-999
Segundo seconds_of_minute 0-59
Minuto minute_of_hour 0-59
Hora hour_of_day 0-23
Día de la semana day_of_week 1 lunes … 7 domingo
Día del mes day_of_month 1-31
Día del año day_of_year 1-366
Semana del año week_of_year 1-53
Mes del año month_of_year 1 enero … 12 diciembre
Año year El año con sus cuatro cifras

Día de la semana y Mes del año ya vienen con los nombres puestos, en inglés: si los sacas en un mensaje verás «Monday» o «January», no el número ni «lunes» o «enero». No les hace falta un Conector de texto.

Subvariables avanzadas, que son otra cosa: no son partes de la fecha, son unidades enteras contadas desde 1970.

En la ventana Se llama
Milisegundos millisecond
Segundo second
Minuto minute
Hora hour
Día day
Semana week
Mes month

Por sí solas no dicen nada —day es un número de seis cifras—, pero restadas entre dos momentos te dan cuántas unidades han pasado. Es la forma de responder a “¿cuántos días lleva sin entrar?”: guardas el day de la última visita y lo restas del day de hoy.

Ventana de configuración de Utilidad de Tiempo

Elegir tipo: Valor, Fecha de creación o Última actualización.

Crear subvariables: una casilla por cada parte del calendario.

Subvariables avanzadas: una casilla por cada unidad. Marca solo las que vayas a usar.

Una sala que saluda distinto los fines de semana.

La caja de la variable global ahora va en su pila, con el complemento en la misma baldosa, en tipo Valor y marcada Día de la semana.

Pila A
│
├─ Complemento: Marcador de posición de variable
│ ├─ Nombre del identificador ................ dia
│ ├─ Escoge una variable ..................... ahora.value.day_of_week (ámbito global)
│ └─ Escoge el tipo de visualización ......... Textual
│
├─ Causante: Entrada
│ └─ Elige causante .......................... Cualquier usuario
│
├─ Efecto: Cambiar valor de variable
│ ├─ Escoge una variable ..................... ahora (ámbito global)
│ ├─ Escoge una operación .................... Asignar
│ └─ Valor de referencia ..................... @current_time
│
└─ Efecto: Mensaje
├─ ¿Cuál es el mensaje? .................... "Hoy es $(dia)"
└─ Visibilidad del mensaje ................. Solo el usuario desencadenante

El Marcador de posición de variable apunta a ahora.value.day_of_week y le pone el identificador dia: el mensaje dice el nombre del día en inglés («Hoy es Monday»), porque ese conector ya viene puesto.

Si en vez de enseñarlo quieres decidir con él, la condición Valor de variable comparando ahora.value.day_of_week con 6 te separa el sábado.

Las partes del calendario van en la hora de la sala. La zona horaria es la de los ajustes de la sala: cambiarla cambia el día y la hora en el acto, sin tocar la variable.

Las avanzadas no. Cuentan siempre desde 1970 en hora universal, porque su trabajo es restarse entre ellas y ahí la zona horaria solo estorbaría.

La semana del año no es la misma que la de @current_time. Aquí la semana empieza en domingo y el 1 de enero cae siempre en la semana 1. La variable del sistema usa la norma internacional, que empieza en lunes. Para las fechas de fin de año las dos no coinciden — no las mezcles en la misma cuenta.

Solo se pueden escribir en tipo Valor. Escribir una parte —ponerle 15 a day_of_month— recoloca esa pieza y reescribe la variable de la caja con la fecha nueva. En los tipos de fecha no hay nada que reescribir: son de solo lectura.

Y solo en tipo Valor se pueden vigilar con Cambio de variable. En los tipos de fecha salen en gris en su lista. En tipo Valor el causante salta cuando cambia la caja, con lo que le haya pasado a esa parte: sube, baja o se queda igual.

Los milisegundos no caben en la Inspección. millisecond y el momento entero son números demasiado grandes para enseñarlos ahí, así que salen como “Hidden”. Funcionan igual: se pueden comparar y restar.