Introduction
En programmation, il est fréquent de devoir manipuler des dates. Il ne s’agit pas simplement d'un agenda numérique, mais bien de l'utilisation des dates, et plus globalement du temps, au sens large. Par exemple un script de sauvegarde, qui ne se déclenche que si il y a eu des modifications sur les données depuis la dernière sauvegarde. Ou encore un programme qui se charge de déclencher des actions à des heures bien précises.
Le temps, et par extension les dates, est un concept souvent utilisé, et nous allons découvrir les outils que proposent les langages de programmation à ce sujet.
Création de dates
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectifs
Savoir créer une date ;
Savoir récupérer la date courante.
Mise en situation
Si l'on veut manipuler des dates en informatique, il semble rapidement essentiel d'avoir besoin d'outils simples pour cela. Imaginez devoir gérer les dates sous la forme de chaînes de caractères, et de devoir implémenter à chaque fois les fonctions nécessaires pour ajouter un jour par exemple. Cela sera beaucoup trop compliqué.
Heureusement, chaque langage de programmation implémente des objets spécifiques, un peu comme des nouveaux types de variables, pour manipuler les dates et les mesures de temps. Nous allons étudier ici le fonctionnement de base de ces fonctions, en apprenant à créer une date.
Syntaxe : Créer une date
En Python, on importe le module datetime
pour utiliser des fonctions en rapport avec les dates et le temps.
En JavaScript, c'est la classe Date
qui est utilisée : on crée une date avec new Date()
.
Les paramètres possibles sont, dans l'ordre : année, mois, jour, heure, minute, seconde, milliseconde.
Exemple :
"""Python: crée la date "04/05/1999 00h00"."""
import datetime
# datetime(year, month, day)
birth = datetime.datetime(1999, 5, 4)
/** JavaScript: crée la date "04/06/1999 00h00" */
// Date(year, month, day)
let birth = new Date(1999, 5, 4)
// Création à partir d'une chaîne AAAA-MM-DD
birth = new Date('1999-06-04')
Attention : Numérotation des mois en JavaScript
En JavaScript, les mois sont numérotés de 0 à 11 au lieu de 1 à 12. En créant Date(2020, 1, 1)
, on crée le 1er février et non le 1er janvier 2020.
Attention :
Les dates s'expriment dans des formats différents en fonction des pays. C'est souvent la forme AAAA-MM-JJ
qui est utilisée en programmation, contrairement à la représentation française JJ/MM/AAAA
. Il est important de savoir ce que représentent les paramètres lorsqu'une date est créée pour ne pas les inverser.
Méthode : Récupérer la date courante
Pour récupérer la date en cours dans un programme, il faut là encore être vigilant au fait que le système sur lequel l'heure se cale n'est pas universel.
En Python, la fonction datetime.now()
du module datetime
retourne la date courante. En JavaScript, il suffit d'utiliser la fonction Date()
sans paramètres.
Exemple :
"""Python."""
import datetime
current_time = datetime.datetime.now()
/** JavaScript */
const currentTime = new Date()
Complément : Documentation
Pour voir les usages détaillés des dates dans un langage, il est important de se référer aux documentations.
Pour plus d'informations sur l'objet Date du JavaScript, voir https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Date. En Python, datetime
, « date »
et « time »
sont documentés sur https://docs.python.org/3/library/datetime.html.
À retenir
Les objets date
permettent de représenter des informations sur l'année, le mois et le jour mais également sur le temps.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Appliquer la notion
Déclarer une variable today
qui récupère la date du jour et afficher son contenu.
/** JavaScript */
let today = new Date()
console.log(today)
Déclarer la valeur springDay
et l'initialiser (avec des paramètres numériques) avec la date du printemps 2021, le 20 mars . Afficher sa valeur.
/** JavaScript */
let springDay = new Date(2021, 2, 20)
console.log(springDay)
Lecture et formatage des dates
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectifs
Savoir lire et afficher des dates ;
Connaître les fonctions principales de formatage.
Mise en situation
Vous le savez, les dates s'écrivent avec un format spécifique, qui varie selon la langue, les pays, ou les cultures. Ces formats d'écritures sont très utiles pour les humains, pour représenter et identifier les différents élément qui composent une date : l'année, le mois, le jour, l'heure, etc.
Les différents objets de date permettent, dans tous les langages, de retourner les dates manipulées en un format lisible pour les humains. À l'inverse, des fonctions peuvent lire la date saisie par un utilisateur, l'interpréter et construire un objet qui lui correspond.
Syntaxe : Getters
Les getters sont des fonctions permettant de récupérer des informations, comme l'heure, le jour, le mois, etc.
En JavaScript, on utilise notamment :
getFullYear()
,getMonth()
,getDate()
qui renvoient respectivement l'année, le mois et le jour dans le mois. Attention, c'est biengetDate()
qui renvoie le numéro du jour, et nongetDay()
qui renvoie le numéro du jour dans la semaine.En Python, on a des attributs et non des fonctions :
year
,month
,day
qui renvoient respectivement l'année, le mois et le jour dans le mois.
Exemple :
"""Python."""
import datetime
today = datetime.datetime.now()
print('Nous sommes le', today.month, 'ème mois de l\'année ')
/** JavaScript */
const today = new Date()
console.log('Nous sommes le ' + (today.getMonth() + 1) + ' ème mois de l\'année')
Attention :
Étant donné que les mois utilisent un index en JavaScript, getMonth()
retourne bien cet index en partant de 0, et non le numéro du mois comme on le compte.
Syntaxe : Setters
Les setters permettent de modifier les attributs en prenant un paramètre (la nouvelle valeur) entre parenthèses.
En JavaScript, on retrouve les même méthodes sauf que
« set »
remplace« get »
:setFullYear()
,setMonth()
,setDate()
, etc., qui modifient respectivement l'année, le mois, le jour dans le mois, l'heure, les minutes, les secondes et les millisecondes.En Python, il existe la fonction
replace()
qui peut prendre en paramètreyear
,month
,day
, etc.
Exemple :
On remarquera qu'en Python, replace()
renvoie une nouvelle date. Au contraire, en JavaScript, le setter modifie directement la date.
"""Python: récupère la date courante et remplace par le 1er jour du mois."""
import datetime
today = datetime.datetime.now()
first_day = today.replace(day=1)
print('Premier jour du mois en cours: ', first_day)
/** JavaScript: récupère la date courante et remplace par le 1er jour du mois */
const firstDay = new Date()
firstDay.setDate(1)
console.log('Premier jour du mois en cours: ' + firstDay)
Complément : Time
Les getters et setters existent aussi pour les heures, minutes, secondes, etc.
Voir : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Date pour le JavaScript et https://docs.python.org/3/library/datetime.html pour le Python.
Syntaxe : Formatage
On fait varier le format d'une date en fonction de l'affichage des informations souhaités.
En Python ,
strftime()
permet de créer une« string from time »
. Il existe de nombreux paramètres permettant de représenter les éléments de la date en version longue ou courte (%Y, %y, %m, etc.).En JavaScript, on dispose de
toLocaleString()
qui prend en paramètre la langue (ou undefined) et un enregistrement qui indique pour chaque champ son format (long, short, 2-digit, etc.).
Exemple :
"""Python."""
import datetime
today = datetime.datetime.now()
print(today) # AAAA-MM-JJ HH:mm:ss.ms
print(today.isoformat()) # AAAA-MM-JJTHH:mm:ss.ms
print(today.strftime("%m/%y/%d")) # MM/JJ/AA
print(today.strftime("%A %d. %B %Y")) # Jour JJ. Mois AAAA
/** JavaScript */
const today = new Date()
console.log(today)
console.log(today.toISOString())
console.log(today.toLocaleString(undefined, {year:'numeric', month: 'numeric', day: 'numeric'}))
console.log(today.toLocaleString(undefined, {year:'numeric', month: 'long', day: 'numeric', weekday: 'short'}))
Remarque : ISO
Le format ISO est un format standardisé sous la forme YYYY-MM-DDTHH:mm:ss.sssZ
. Le 1 janvier 2000, 12h00 devient 2000-01-01T12:00:00.000Z.
Les fonctions toISOString()
en JavaScript et isoformat()
en Python permettent de traduire une date dans ce format.
Complément : Documentation
Les formats des dates et les nombreuses utilisations existantes sont documentées en JavaScript et en Python.
À retenir
Une date créée peut être lue, modifiée et formatée grâce notamment aux getters et setters.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Appliquer la notion
Le calendrier révolutionnaire est créé pendant la Révolution française et utilisé jusqu'en 1806. Il comporte 12 mois que l'on peut à peu près convertir comme cela :
Vendémiaire (22 septembre ~ 21 octobre)
Brumaire (22 octobre ~ 21 novembre)
Frimaire (22 novembre ~ 21 décembre)
Nivôse (22 décembre ~ 20 janvier)
Pluviôse (21 janvier ~ 19 février)
Ventôse (20 février ~ 21 mars)
Germinal (22 mars ~ 19 avril)
Floréal (20 avril ~ 19 mai)
Prairial (20 mai ~ 18 juin)
Messidor (19 juin ~ 18 juillet)
Thermidor (19 juillet ~ 17 août)
Fructidor (18 août ~ 17 septembre)
Les jours situés entre Fructidor et Vendémiaire sont appelés les Jours supplémentaires.
Réaliser le programme JavaScript qui permet d'afficher le mois dans le calendrier révolutionnaire correspondant à la date du jour.
Utiliser des structures conditionnelles if
avec des opérateurs booléens &&
et ||
pour définir le bon mois en fonction du jour et du mois courant.
On peut récupérer le jour et le mois d'une date avec les méthodes getDay()
et getMonth()
.
Supposons que le jour soit stocké dans la variable day
et le mois dans la variable month
. On pourra vérifier si cette date est comprise entre le 22 septembre et le 21 octobre avec la condition suivante :
// Septembre est représenté par 8 et non par 9
(day >= 22 && month == 8) || (day <= 21 && month == 9)
Chaque numéro de mois correspond à un nom, en faisant attention au fait que la numérotation commence à 0 en JavaScript.
/** JavaScript */
const today = new Date()
const day = today.getDate()
const month = today.getMonth()
let revolutionaryMonth
if((day >= 22 && month == 8) || (day <= 21 && month == 9)) {
revolutionaryMonth = 'Vendémiaire'
} else if((day >= 22 && month == 9) || (day <= 21 && month == 10)) {
revolutionaryMonth = 'Brumaire'
} else if((day >= 22 && month == 10) || (day <= 21 && month == 11)) {
revolutionaryMonth = 'Frimaire'
} else if((day >= 22 && month == 11) || (day <= 20 && month == 0)) {
revolutionaryMonth = 'Nivôse'
} else if((day >= 21 && month == 0) || (day <= 19 && month == 1)) {
revolutionaryMonth = 'Pluviôse'
} else if((day >= 20 && month == 1) || (day <= 21 && month == 2)) {
revolutionaryMonth = 'Ventôse'
} else if((day >= 22 && month == 2) || (day <= 19 && month == 3)) {
revolutionaryMonth = 'Germinal'
} else if((day >= 20 && month == 3) || (day <= 19 && month == 4)) {
revolutionaryMonth = 'Floréal'
} else if((day >= 20 && month == 4) || (day <= 18 && month == 5)) {
revolutionaryMonth = 'Plairial'
} else if((day >= 19 && month == 5) || (day <= 18 && month == 6)) {
revolutionaryMonth = 'Messidor'
} else if((day >= 19 && month == 6) || (day <= 17 && month == 7)) {
revolutionaryMonth = 'Thermidor'
} else if((day >= 18 && month == 7) || (day <= 17 && month == 8)) {
revolutionaryMonth = 'Fructidor'
} else {
revolutionaryMonth = 'Jours supplémentaires'
}
console.log(revolutionaryMonth)
Manipuler des dates
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectif
Savoir calculer des dates et des durées
Savoir copier des dates
Mise en situation
Savoir lire et écrite des dates est utile, mais il faut aussi pouvoir les manipuler. Chaque type de variable a des opérations qui lui sont propres, il en va de même pour les dates. C'est tout l'intérêt d'utiliser les objets manipulant les dates intégrés à un langage : pouvoir facilement effectuer des opérations, telles que ajouter ou soustraire des dates, les comparer, ou encore calculer des durées entre elles. Nous allons voir ici comment réaliser ces opérations.
Syntaxe : Copier une date
En Python, affecter une date existante à une variable permet de la copier.
En JavaScript, la fonction Date()
peut prendre une date en paramètre pour copier sa valeur.
Exemple :
"""Python."""
import datetime
day = datetime.datetime.now()
dayCopy = day
/** JavaScript: duplique une date */
const day = new Date()
const dayCopy = new Date(day)
Ajouter et soustraire
Il est possible de calculer une date à partir d'une autre, pour y ajouter ou soustraire des jours, des mois, des années, etc. En utilisant les attributs et replace()
en Python, ou les fonctions getters et setters en JavaScript, on peut affecter les nouvelles valeurs calculées aux dates en question.
Exemple :
La date est d'abord copiée. Le nouveau mois est calculé en soustrayant 1 à l'ancien, puis affecté à la date.
"""Python: retire un mois à la date actuelle."""
import datetime
day = datetime.datetime.now()
new_month = day.month-1
# Remplace par le mois soustrait
last_month = day.replace(month=new_month)
print(last_month)
/** JavaScript: retire un mois à la date actuelle */
const day = new Date()
let lastMonth = new Date(day)
const newMonth = lastMonth.getMonth() - 1
// Remplace par le mois soustrait
lastMonth.setMonth(newMonth)
console.log(lastMonth)
Calcul de durée
Pour calculer une durée entre deux dates, en jours, mois, années, etc., on peut par exemple soustraire les valeurs des dates.
Exemple : Nombre d'années entre deux dates
"""Python: affiche le nombre d'années de vie."""
import datetime
birth = datetime.datetime(1930, 8, 1)
death = datetime.datetime(2002, 1, 23)
lifetime = death.year - birth.year # calcule la différence entre les années
if death.month < birth.month: # retire un an si le dernier anniversaire n'est pas atteint
lifetime -= 1
print('Pierre Bourdieu est mort à ', lifetime, ' ans')
/** JavaScript: affiche le nombre d'années de vie */
const birth = new Date(1930, 7, 1)
const death = new Date(2002, 0, 23)
let lifetime = death.getFullYear() - birth.getFullYear() // calcule la différence entre les années
if (death.getMonth() < birth.getMonth()) { // retire un an si le dernier anniversaire n'est pas atteint
lifetime -= 1
}
console.log('Pierre Bourdieu est mort à ' + lifetime + ' ans')
À retenir
Les dates peuvent être manipulées de nombreuses manières, y compris sous leur forme entière, c'est à dire en millisecondes.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Appliquer la notion
On souhaite réaliser un mini agenda qui regroupe les événements du jour et du lendemain. Pour cela, stocker la date courante dans une constante today
pour l'afficher.
/** JavaScript */
const today = new Date()
console.log(today)
Ajouter au programme une nouvelle variable tomorrow
et lui affecter la date courante plus 1 jour pour l'afficher.
On peut récupérer le jour du mois grâce à getDate()
et le modifier grâce à setDate()
.
/** JavaScript */
const today = new Date()
const tomorrow = new Date(today)
tomorrow.setDate(tomorrow.getDate() + 1)
console.log(today)
console.log(tomorrow)
On commence par copier la date actuelle dans une variable. On modifie la valeur de son jour en ajoutant 1 au jour récupéré.
Epoch
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Objectifs
Comprendre l'utilisation des timestamp ;
Passer d'une date à un timestamp et inversement.
Mise en situation
Peu importe le format ou la langue de la date, il existe une manière universelle de l'exprimer : en nombre de millisecondes.
Définition : Epoch
L'epoch désigne la date à partir de laquelle est mesuré le temps par les systèmes d'exploitation. Il en existe plusieurs, le plus connu étant l'Unix Epoch (aussi appelé POSIX time).
Il est utilisé par la plupart des langages (JavaScript, Python, C, C++, PHP, etc.) et par les systèmes basés sur Unix.
L'Unix Epoch est fixé au 1er janvier 1970 et est utilisé pour calculer le timestamp dans ces langages.
Définition : Timestamp
Le timestamp est un nombre entier qui compte la durée écoulée depuis une certaine date. On peut passer d'un timestamp à une date et inversement.
Dans le cas des langages comme JavaScript et Python qui utilisent l'Unix Epoch, le timestamp représente le nombre de millisecondes écoulées depuis le 1er janvier 1970.
Syntaxe :
En Python, datetime.timestamp()
transforme la date en paramètre en timestamp. datetime.fromtimestamp()
permet à l'inverse de transformer le timestamp en date.
En JavaScript, le getter getTime()
récupère le timestamp à partir de la date. Pour passer d'un timestamp à une date, on peut simplement utiliser Date()
avec le timestamp en paramètre.
Exemple : Date to Timestamp
"""Python: affiche le timestamp de la date courante."""
import datetime
today = datetime.datetime.now()
print(datetime.datetime.timestamp(today))
/** JavaScript: affiche le timestamp de la date courante */
const today = new Date()
console.log(today.getTime())
Exemple : Timestamp to Date
"""Python: affiche la date de l'epoch Unix (1970-01-01)."""
import datetime
timestamp = 0
date = datetime.datetime.fromtimestamp(timestamp)
print(date)
/** JavaScript: affiche la date de l'epoch Unix (1970-01-01) */
const timestamp = 0
const day = new Date(timestamp)
console.log(day)
Complément : Le bug de l'an 2038
Le bug de l'an 2038 est prévu pour le 19 janvier 2038 à 3 h 14 min 8 s. C'est un bug informatique qui perturberait certains systèmes informatiques à cause de la taille du timestamp à partir de cette date. Ils retomberaient alors au 13 décembre 1901 à 20 h 45 min 52 s.
Voir Bug de l'an 2038 pour plus d'informations.
À retenir
Les dates sont souvent représentées comme un nombre de millisecondes écoulées depuis le 1er janvier 1970. Un tel nombre est appelé timestamp, et il est possible de convertir un timestamp en date et inversement.
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger la vidéo.
Appliquer la notion
Les organisateurs d'un festival veulent afficher sur leur site web le décompte en secondes pour l'événement qui a lieu le 21 mai 2030.
Créer le programme JavaScript qui calcule le nombre de secondes entre aujourd'hui et la date et l'affiche. On utilisera la fonction Math.round()
si besoin pour arrondir un nombre décimal.
On peut récupérer les deux timestamps requis avec la fonction getTime()
. Ces timestamps étant de simples nombres, on peut les soustraire facilement.
Le nombre de millisecondes est égal au nombre de secondes divisé par 1000.
/** JavaScript */
const today = new Date()
const festivalDate = new Date(2030, 4, 21)
const seconds = Math.round((festivalDate.getTime() - today.getTime()) / 1000)
console.log(seconds, 'secondes avant le début du festival')
Le site web doit maintenant également afficher « J-X »
, avec X le nombre de jours jusqu'au festival. Ajouter au programme l'affichage demandé. On utilisera la fonction Math.floor()
pour arrondir un nombre décimal à l'entier inférieur.
Un jour contient 24 heures de 60 minutes de 60 secondes chacune, soit 24 * 60 * 60 secondes. On peut donc faire la division du nombre de secondes total par le nombre de secondes par jour pour avoir le nombre de jours.
/** JavaScript */
const today = new Date()
const festivalDate = new Date(2030, 4, 21)
const oneDay = 24 * 60 * 60 // nombre de secondes par jour
const seconds = Math.round((festivalDate.getTime() - today.getTime()) / 1000)
console.log(seconds, 'secondes avant le début du festival')
console.log('J-' + Math.floor(seconds / oneDay))
Quiz
Quiz - Culture
À quoi correspond l'Epoch Unix ?
Au jour de la création d'Unix.
Au 1er janvier 1970.
La date à partir de laquelle est calculé le timestamp dans de nombreux langages.
La date à laquelle est prévu un bug informatique altérant les horloges des systèmes.
Quel est le format ISO correct du moment où un homme a marché sur la Lune ?
21 07 1969 . 02:56:07.012Z
1969-07-21T02:56.07.012Z
1969/07/21 02:56.07.012Z
Quels outils permettent de récupérer les informations d'une date en JavaScript ?
Des attributs
Des fonctions de type setter
Des fonctions de type getter
Quiz - Méthode
Que représente le passage d'une date en timestamp avec la fonction getTime()
, en JavaScript ?
C'est la conversion en millisecondes écoulées depuis le 1er jour de l'année.
C'est le passage au format ISO.
C'est la conversion en secondes écoulée depuis l'Epoch Unix.
Quelles options peuvent être utilisées pour formater les champs d'une date (année, mois, jour...) avec la fonction toLocaleDateString()
?
long
numeric
short
small
Quiz - Code
Qu'affiche le programme suivant ?
/** JavaScript */
const date = new Date(1975, 5, 15)
const format = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'short'
}
console.log(date.toLocaleString('fr-FR', format))
Thu, Jun 15, 1975
Thursday, June 15, 1975
Thu, June 15, 1975
Thursday, June 15, 75
Comment créer la date du 11 mai 2030 en JavaScript ?
new Date("2030/5/11") ;
new Date(11, 4, 2030) ;
new Date(2030, 4, 11) ;
new Date(2030, 5, 11) ;
Sans exécuter le code, déterminer la valeur renvoyée par l'instruction suivante.
/** JavaScript */
const revolution = new Date('1789/07/14')
console.log(revolution.getMonth())
7
6
May
Quiz - Culture
À quoi correspond l'Epoch Unix ?
Au jour de la création d'Unix.
Au 1er janvier 1970.
La date à partir de laquelle est calculé le timestamp dans de nombreux langages.
La date à laquelle est prévu un bug informatique altérant les horloges des systèmes.
Quel est le format ISO correct du moment où un homme a marché sur la Lune ?
21 07 1969 . 02:56:07.012Z
1969-07-21T02:56.07.012Z
1969/07/21 02:56.07.012Z
Le format standard ISO est YYYY-MM-DDTHH:mm.ss.sssZ
, avec :
« YYYY »
pour l'année« MM »
pour le mois« DD »
pour le jour« HH »
pour l'heure« mm »
pour les minutes« ss »
pour les secondes« sss »
pour les millisecondes
Quels outils permettent de récupérer les informations d'une date en JavaScript ?
Des attributs
Des fonctions de type setter
Des fonctions de type getter
Des attributs
En JavaScript les informations sont accessibles par des fonctions, en Python on y accède par des attributs.
Des fonctions de type setter
Les setters sont les fonctions permettant de modifier les éléments d'un objet.
Des fonctions de type getter
Les getters sont les fonctions qui permettent de lire des valeurs d'un objet.
Quiz - Méthode
Que représente le passage d'une date en timestamp avec la fonction getTime()
, en JavaScript ?
C'est la conversion en millisecondes écoulées depuis le 1er jour de l'année.
C'est le passage au format ISO.
C'est la conversion en secondes écoulée depuis l'Epoch Unix.
Quelles options peuvent être utilisées pour formater les champs d'une date (année, mois, jour...) avec la fonction toLocaleDateString()
?
long
numeric
short
small
Quiz - Code
Thu, Jun 15, 1975
Thursday, June 15, 1975
Thu, June 15, 1975
Thursday, June 15, 75
Thu, Jun 15, 1975
Le mois devrait être en écriture longue.
Thursday, June 15, 1975
Le jour devrait être en écriture courte.
Thu, June 15, 1975
Thursday, June 15, 75
Le jour devrait être en écriture courte et l'année sur 4 chiffres.
On a : l'année sur 4 chiffres, le mois en écriture longue, le numéro du jour dans le mois ainsi que le jour de la semaine en écriture courte.
Comment créer la date du 11 mai 2030 en JavaScript ?
new Date("2030/5/11") ;
new Date(11, 4, 2030) ;
new Date(2030, 4, 11) ;
new Date(2030, 5, 11) ;
new Date("2030/5/11") ;
new Date(11, 4, 2030) ;
Les paramètres ne sont pas dans l'ordre.
new Date(2030, 4, 11) ;
L'index du mois en JavaScript commence à 0, 4 représente donc le cinquième mois, soit mai.
new Date(2030, 5, 11) ;
L'index du mois en JavaScript commence à 0, 5 représente donc le sixième mois, soit juin.
7
6
May
7
6
May
getMonth()
retourne un entier de 0 à 11 qui représente l'index du mois.
Créée à partir d'une chaîne de caractères, la valeur du mois ne représente pas son index (en partant de 0) mais bien le Xème mois de l'année, ici le 7e mois donnera un index de 6.
Défi
Vous souhaitez mettre en place un système permettant de faire des statistiques sur la météo de votre région.
Vous disposez déjà d'une fonction qui vous permet de savoir s'il fait beau temps pour un jour donné.
/** JavaScript */
// Simule l'information du beau temps.
function isGoodWeather () {
return Math.random() < 0.20
}
À partir de cette fonction prédéfinie, construisez un programme qui, pour chaque jour de l'année, affiche sa météo et calcule à la fin de l'année le pourcentage de jours de beau temps.
Pour cela, dans une boucle for
, parcourez 365 jours en affichant à chaque fois « Jour X : il fait beau »
ou « Jour X : il fait moche »
.
À la fin des 365 jours, afficher le pourcentage de beaux jours obtenus.
Appeler simplement isGoodWeather()
pour chaque jour : si le résultat est true
, alors il s'agit d'un beau jour.
Utiliser Math.round(x)
pour arrondir un nombre x.
let goodDays = 0
for (let i = 0; i < 365; i++) {
if (isGoodWeather()) {
goodDays++
console.log('Jour ' + i + ': il fait beau')
} else {
console.log('Jour ' + i + ': il fait moche')
}
}
const percent = Math.round(goodDays / 365 * 100)
console.log('Pourcentage de jours beaux dans l\'année: ' + percent + '%')
Vous voulez maintenant savoir si vous pouvez sortir dehors pour un jour donné. Vous sortez s'il fait beau.
En réutilisant la fonction prédéfinie, réalisez un programme qui boucle jusqu'à tant qu'il fasse beau.
Affichez pour chaque jour « Jour X : je sortirai demain »
ou « Jour X : il faut beau, je sors »
pour le jour de beau temps.
let goodDay = false
let i = 0
while (!goodDay) {
goodDay = isGoodWeather()
if (goodDay) {
console.log('Jour ' + i + ': il fait beau je sors!')
} else {
console.log('Jour ' + i + ': je sortirai demain...')
}
i++
}
Finalement, vous voulez avoir un programme qui consigne le jour de chaque semaine où vous êtes sorti.
Pour chacune des 52 semaines de l'année, le programme boucle jusqu'à trouver un jour de beau temps dans la semaine. Dans ce cas, il affiche : « Je suis sorti cette semaine X, le jour Y »
.
Les semaines sont parcourues dans une boucle for
. À l'intérieur, une boucle while
permet de parcourir les jours tant qu'aucun n'est un beau jour.
La boucle des jours de la semaine doit s'arrêter dans deux cas :
Si un jour de beau temps est trouvé.
S'il n'y a plus de jours dans la semaine (pas plus de 7 itérations par semaine).
On obtient deux boucles imbriquées :
La boucle externe effectuera quoi qu'il arrive 52 itérations.
La boucle imbriquée effectuera au maximum 7 itérations, et s'arrêtera avant si on trouve un jour de beau temps.
for (let i = 1; i < 53; i++) {
// Début de la semaine i
let goodDay = false
let weekday = 1
// Tant qu'aucun beau jour n'est trouvé et que la semaine n'est pas terminée
while (!goodDay && weekday <= 7) {
goodDay = isGoodWeather()
if (goodDay) {
console.log('Je suis sorti cette semaine ' + i + ', le jour ' + weekday)
}
weekday++
}
}
Conclusion
Dans ce module, nous avons appris à créer et utiliser des dates dans un programme. Pour cela il est nécessaire de manipuler des objets de type date, qui existent dans la plupart des langages courants. En utilisant ces objets, il est ensuite possible de réaliser facilement des opérations, comme l'ajout ou le retrait de temps sur une date, la comparaison ou le calcul d'une durée. Enfin, nous avons vu de quelle manière les ordinateurs gèrent les dates : à l'aide de timestamps et à partir d'une date précise dans l'histoire.