Source: Scratch Wiki en français
Scratch propose quelques blocs de valeur permettant de manipuler des grandeurs liées au temps.
Ce tutoriel propose d'implémenter plusieurs blocs personnalisés permettant de travailler plus aisément avec le temps.
Horodatage
L'horodatage (en anglais "timestamp") est une grandeur consistant à associer à une donnée numérique une date ou un événement.
La plus courante, aussi nommée horodatage par excès, est l'heure Unix (du système du même nom)
définir Horodatage mettre [temps v] à ( [plancher v] de ( ( (jours depuis 2000) + [10957] ) * [86400] ) )
Millisecondes
Il n'existe pas directement de bloc ([milliseconde v] actuelle :: capteurs) ; l'implémentation proposée est alignée avec l'écoulement des secondes.
définir Milliseconde mettre [temps v] à ( [plancher v] de ( ( (jours depuis 2000) * [86400000] ) mod [1000] ) )
Utilitaires
définir année bissextile (année) mettre [temps v] à < < ( (année) mod [400] ) = [0] > ou < < ( (année) mod [4] ) = [0] > et < non < ( (année) mod [100] ) = [0] > > > >
Conversions
définir jours depuis 2000 (t) vers date
si <(t) = []> alors
jours depuis 2000 (jours depuis 2000) vers date
stop [ce script v]
fin
supprimer tous les éléments de la liste [date v]
ajouter [2000] à [date v]:: list
ajouter [1] à [date v]:: list
ajouter [1] à [date v]:: list
ajouter [0] à [date v]:: list
ajouter [0] à [date v]:: list
ajouter [0] à [date v]:: list
si <(t) = [0]> alors
stop [ce script v]
fin
ajouter (<(t) > [0]> - <(t) < [0]>) à [date v]:: list
mettre [temps.tmp v] à [0]
répéter jusqu'à ce que < non < ( ([abs v] de (t)) - (temps.tmp)) > [0] > >
si < non < (temps.tmp) = [0] > > alors
remplacer l'élément [1] de la liste [date v] par ((élément [1] de [date v]) + (élément [7] de [date v]))
fin
année bissextile (élément [1] de [date v]) :: custom
si < (temps) = [1] > alors
mettre [temps v] à (temps.tmp)
ajouter [366] à [temps.tmp v]
sinon
mettre [temps v] à (temps.tmp)
ajouter [365] à [temps.tmp v]
fin
fin
si <(t) > [0]> alors
mettre [temps.tmp v] à ((t) - (temps))
sinon
mettre [temps.tmp v] à ((t) + (temps.tmp))
remplacer l'élément [1] de la liste [date v] par ((élément [1] de [date v]) - (1))
fin
remplacer l'élément [7] de la liste [date v] par [1]
répéter jusqu'à ce que <(élément [7] de [date v]) > [11] >
mettre [temps v] à (élément [7] de [date v])
si <<(temps) = [4]> ou <<(temps) = [6]> ou <<(temps) = [9]> ou <(temps) = [11]>>>> alors
si < (temps.tmp) > [30] > alors
ajouter [-30] à [temps.tmp v]
remplacer l'élément [2] de la liste [date v] par ((élément [2] de [date v]) + (1))
sinon
remplacer l'élément [7] de la liste [date v] par [12]
fin
sinon
si <(temps) = [2]> alors
année bissextile (élément [1] de [date v]) :: custom
si < (temps.tmp) > ([28] + (temps)) > alors
ajouter ([-28] - (temps)) à [temps.tmp v]
remplacer l'élément [2] de la liste [date v] par ((élément [2] de [date v]) + (1))
sinon
remplacer l'élément [7] de la liste [date v] par [12]
fin
sinon
si < (temps.tmp) > [31] > alors
ajouter [-31] à [temps.tmp v]
remplacer l'élément [2] de la liste [date v] par ((élément [2] de [date v]) + (1))
sinon
remplacer l'élément [7] de la liste [date v] par [12]
fin
fin
fin
remplacer l'élément [7] de la liste [date v] par ((élément [7] de [date v]) + (1))
fin
supprimer l'élément [7] de [date v]
remplacer l'élément [3] de la liste [date v] par ([plancher v] de (temps.tmp))
mettre [temps.tmp v] à ([24] * ((temps.tmp) mod [1]))
remplacer l'élément [4] de la liste [date v] par ([plancher v] de (temps.tmp))
mettre [temps.tmp v] à ([60] * ((temps.tmp) mod [1]))
remplacer l'élément [5] de la liste [date v] par ([plancher v] de (temps.tmp))
mettre [temps.tmp v] à ([60] * ((temps.tmp) mod [1]))
remplacer l'élément [6] de la liste [date v] par ([plancher v] de (temps.tmp))
mettre [temps.tmp v] à [0]
mettre [temps v] à [date convertie]
définir date (a) (m) (j) (h) (min) (s) vers jours depuis 2000