Visit Mozilla.org

Guide JavaScript 1.5:Objets prédéfinis:L'objet Date

Un article de MDC.


[modifier] L'objet Date

JavaScript ne dispose pas d'un type de données pour les dates. Cependant, il est possible d'utiliser l'objet Date et ses méthodes pour travailler avec des dates et des heures dans vos applications. L'objet Date propose un grand nombre de méthodes permettant de définir, obtenir et manipuler des dates. Il ne possède aucune propriété.

JavaScript gère les dates d'une manière similaire à Java. Les deux langages ont de nombreuses méthodes en commun, et stockent les dates sous la forme du nombre de millisecondes écoulées depuis le 1er janvier 1970, 00:00:00.

Les limites de l'objet Date correspondent à -100 000 000 jours avant et 100 000 000 jours après le 1er janvier 1970 (UTC).

Pour créer un objet Date :

nomObjetDate = new Date([paramètres])

nomObjetDate est le nom de l'objet Date qui sera créé ; il peut s'agir d'un nouvel objet ou d'une propriété d'un objet existant.

Les paramètres possibles dans cette syntaxe sont :

  • Aucun paramètre : crée la date et l'heure actuelles. Par exemple, today = new Date().
  • Une chaîne représentant une date en anglais dans la forme suivante : "Month day, year hours:minutes:seconds." Par exemple, Noel95 = new Date("December 25, 1995 13:30:00"). Si les heures, minutes ou secondes ne sont pas précisées, elles seront initialisées à zéro.
  • Un ensemble de valeurs entières pour l'année, le mois et le jour. Par exemple, Noel95 = new Date(1995,11,25).
  • Un ensemble de valeurs entières pour l'année, le mois, le jour, l'heure, les minutes et les secondes. Par exemple, Noel95 = new Date(1995,11,25,9,30,0).

JavaScript 1.2 et antérieur
L'objet Date fonctionne de la manière suivante :

  • Les dates antérieures à 1970 ne sont pas permises.
  • JavaScript dépend des infrastructures et fonctions de dates de la plateforme utilisée ; le comportement de l'objet Date varie d'une plateforme à l'autre.

[modifier] Méthodes de l'objet Date

Les méthodes de l'objet Date permettant de gérer dates et heures peuvent être séparés en quelques grandes catégories :

  • les méthodes de définition, pour définir des valeurs de date et d'heure dans des objets Date.
  • les méthodes de consultation, pour obtenir des valeurs de date et d'heure depuis des objets Date.
  • les méthodes de formatage, pour renvoyer des chaînes de caractères depuis des objets Date.
  • les méthodes d'analyse et les méthodes UTC, pour analyser des chaînes et les transformer en objets Date.

Avec les méthodes de définition et de consultation, il est possible de changer et d'obtenir les secondes, minutes, heures, jours du mois ou de la semaine, mois et années séparément. Il existe une méthode getDay qui renvoie le jour de la semaine, mais pas de méthode correspondante setDay, car le jour de la semaine est calculé automatiquement. Ces méthodes utilisent des nombres entiers pour représenter ces valeurs de la manière suivante :

  • Secondes (Seconds) et minutes (Minutes) : de 0 à 59
  • Heures (Hours) : de 0 à 23
  • Jour de la semaine (Day) : 0 (dimanche) à 6 (samedi)
  • Date (Date) : 1 à 31 (jour du mois)
  • Mois (Month) : 0 (janvier) à 11 (décembre)
  • Année (Year) : années écoulées depuis 1900

Par exemple, supposons que vous avez défini la date suivante :

Noel95 = new Date("December 25, 1995")

Dans ce cas, Noel95.getMonth() renvoie 11, et Noel95.getFullYear() renvoie 1995.

Les méthodes getTime et setTime sont utiles pour les comparaisons de dates. La méthode getTime renvoie le nombre de millisecondes écoulées depuis le 1er janvier 1970, 00:00:00 pour un objet Date.

Par exemple, le code suivant affiche le nombre de jours restants pour l'année courante :

aujourdhui = new Date();
findannee = new Date(1995,11,31,23,59,59,999); // définit le jour et le mois
findannee.setFullYear(today.getFullYear()); // choisit l'année courante
msParJour = 24 * 60 * 60 * 1000; // Nombre de millisecondes par jour
joursRestants = (findannee.getTime() - aujourdhui.getTime()) / msParJour;
joursRestants = Math.round(joursRestants); //renvoie le nombre de jours restants dans l'année

Cet exemple crée un objet Date appelé aujourdhui contenant la date du jour. Il crée ensuite un second objet Date appelé findannee et le positionne sur l'année courante. Ensuite, grâce au nombre de millisecondes par jour qui est facilement calculable, il calcule le nombre de jours entre aujourdhui et findannee à l'aide de getTime et l'arrondit à un nombre entier de jours.

La méthode parse est pratique pour assigner des valeurs provenant de chaînes contenant des dates à des objets Date existants. Par exemple, le code suivant utilise parse et setTime pour assigner une valeur à l'objet IPOdate :

IPOdate = new Date();
IPOdate.setTime(Date.parse("Aug 9, 1995"));

[modifier] Utilisation de l'objet Date : un exemple

Dans l'exemple qui suit, la fonction JSClock() renvoie l'heure sous la forme d'une horloge digitale AM/PM.

function JSClock() {
  var time = new Date();
  var hour = time.getHours();
  var minute = time.getMinutes();
  var second = time.getSeconds();
  var temp = "" + ((hour > 12) ? hour - 12 : hour);
  if (hour == 0)
     temp = "12";
  temp += ((minute < 10) ? ":0" : ":") + minute;
  temp += ((second < 10) ? ":0" : ":") + second;
  temp += (hour >= 12) ? " P.M." : " A.M.";
  return temp;
}

La fonction JSClock crée tout d'abord un nouvel objet Date appelé time ; comme aucun paramètre n'est fourni, il contient la date et l'heure courantes. La fonction appelle ensuite les méthodes getHours, getMinutes et getSeconds pour assigner les valeurs des heures, minutes et secondes courantes aux variables hour, minute et second.

Les quatre instructions suivantes construisent une chaîne basée sur l'heure ainsi obtenue. La première crée une variable temp en lui assignant une valeur à l'aide d'une expression conditionnelle ; si hour est supérieur à 12, la valeur de (hour - 12), sinon simplement la valeur hour, à moins que celle-ci soit zéro, auquel cas elle devient 12.

L'instruction qui suit ajoute une valeur minute à la chaîne temp. Si la valeur de minute est inférieure à 10, l'expression conditionnelle ajoute une chaîne avec un zéro significatif ; sinon elle ajoute des points de démarcation. Une instruction similaire ajoute ensuite la valeur issue de seconds.

Pour terminer, une expression conditionnelle ajoute "PM" à temp si hour est supérieure ou égale à 12 ; "AM" dans les autres cas.