Calculs de date et d'heure
L'objet Date, objet et les méthodes connexes permettent d'effectuer des tâches courantes de calendrier et d'horloge, telles que la manipulation et la comparaison de dates, et le calcul du temps écoulé.
Définition d'une date à la date actuelle
Lorsque vous créez une instance du Date, objet, il contient une valeur qui représente un instant I dans le temps, précis à la milliseconde près. Par la suite, vous pouvez lire ou modifier cette valeur de date et d'heure.
L'exemple suivant montre comment obtenir la date actuelle et l'afficher au format mm/jj/aa.
// Create a date object. Because no arguments are
// passed, the date object contains the current date and
// time (to the millisecond).
var dt : Date = new Date();
// Determine and display the month, day, and year.
// The getMonth method uses a zero offset for
// the month number.
var month : Number = dt.getMonth()+1;
var day : Number = dt.getDate();
var year : Number = dt.getFullYear();
print (month + "/" + day + "/" + year);
Définition d'une date spécifique
Dans l'exemple suivant, une date spécifique est passée au constructeur.
// Create a date object for a specific date.
var dt : Date = new Date('8/24/2009');
JScript est assez flexible sur le format de la date. Il permet d'utiliser des variantes telles que 24-8-2009, 24 août 2009 et 24 aoû 2009.
Vous pouvez également spécifier une heure, comme indiqué dans les exemples suivants.
// Create a date object for a specific date and time.
// The time format is hours:minutes:seconds.
var dtA : Date = new Date('8/24/2009 14:52:10');
// Create a date object for the same date and time as in
// the previous example.
// The parameters are:
// year, month, day, hours, minutes, seconds.
// August is month 7 because January is month 0.
var dtB : Date = new Date(2009, 7, 24, 14, 52, 10);
Ajout et soustraction de jours
Un exemple précédent utilise les méthodes getMonth, getDate et getFullYear pour obtenir certains éléments de la date. Un groupe équivalent de méthodes set vous permet de modifier la valeur dans l'objet Date.
L'exemple suivant vous montre comment définir une date à celle du jour précédent. Il obtient la date et le jour du mois pour le jour actuel, puis définit le jour à un jour plus tôt en utilisant la setDate, méthode.
// Get the current day's date and day of month.
var myDate : Date = new Date();
var dayOfMonth : Number = myDate.getDate();
// Reset myDate to one day earlier.
myDate.setDate(dayOfMonth - 1);
JScript s'incrémente au mois ou à l'année suivant, si nécessaire. Par exemple, si la date actuelle est le 28 janvier et que vous ajoutez 7 jours, il définit correctement la date au 4 février. L'exemple suivant ajoute une semaine à la date actuelle. L'exemple efface également l'heure dans la date.
var myDate : Date = new Date();
myDate.setDate(myDate.getDate() + 7);
// Clear the time.
myDate.setHours(0, 0, 0, 0);
Utilisation des mois et des années
L'exemple suivant contient une boucle qui génère des dates commençant 1 mois après la date actuelle. Les mois s'incrémentent correctement jusqu'à l'année suivante.
var currentDate : Date = new Date();
for(var index : int = 1; index <= 12; index++)
{
var myDate : Date = new Date();
myDate.setMonth(currentDate.getMonth() + index);
print ("Month+" + index + ": " + myDate);
}
L'exemple suivant obtient une date un an avant la date actuelle.
var myDate : Date = new Date();
myDate.setFullYear (myDate.getFullYear() - 1);
L'exemple suivant obtient le premier jour du mois qui suit le mois actuel. Il incrémente le mois, puis affecte la valeur 1 au jour du mois.
function GetFirstOfNextMonth() : Date
{
var myDate : Date = new Date();
myDate.setMonth(myDate.getMonth() + 1);
myDate.setDate(1);
return myDate;
}
L'exemple suivant détermine le dernier jour du mois actuel. Pour ce faire, il détermine le premier jour du mois suivant, auquel il soustrait un jour.
// Determine the last day of the current month.
// The GetFirstOfNextMonth() function is in the previous example.
var myDate : Date = GetFirstOfNextMonth();
myDate.setDate (myDate.getDate() - 1);
Utilisation des jours de la semaine
La getDay, méthode (à ne pas confondre avec getDate) retourne une valeur comprise entre 0 et 6 pour indiquer le jour de la semaine. Dimanche correspond à zéro, lundi à 1 et ainsi de suite. L'exemple suivant montre comment déterminer le jour actuel de la semaine.
var arDays : Array = ["Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"];
var today : Date = new Date();
var dayNum : Number = today.getDay();
var dayOfWeek : String = arDays[dayNum];
L'exemple suivant retourne la date du vendredi avant la date actuelle.
function getPreviousDayOfWeek(dayOfWeekNum : Number) : Date
{
var dt : Date = new Date();
if (dt.getDay() == dayOfWeekNum)
{
// It is currently the day of the week specified in
// the function call. Subtract one week.
dt.setDate(dt.getDate() - 7);
}
else
{
// Go back a day at a time until arriving
// at the specified day of week.
while (dt.getDay() != dayOfWeekNum)
{
dt.setDate(dt.getDate() - 1);
}
}
return dt;
}
var friday : Number = 5;
var myDate : Date = getPreviousDayOfWeek(friday);
L'exemple suivant détermine la date du jour férié de Thanksgiving aux États-Unis, qui correspond au quatrième jeudi de novembre. Le script recherche le 1er novembre de l'année actuelle, détermine le premier jeudi, puis ajoute trois semaines.
// Determine the current date and clear the time.
var myDate : Date = new Date();
myDate.setHours(0, 0, 0, 0);
// Determine November 1 of the current year.
var november : Number = 10;
myDate.setMonth(november);
myDate.setDate(1);
// Find Thursday.
var thursday : Number = 4;
while(myDate.getDay() != thursday)
{
myDate.setDate(myDate.getDate() + 1) ;
}
// Add 3 weeks.
myDate.setDate(myDate.getDate() + 21);
Calcul du temps écoulé
La getTime, méthode retourne le nombre de millisecondes qui se sont écoulées depuis la date et l'heure zéro du 1er janvier 1970 à minuit. Si la date est antérieure à cette date, getTime retourne un nombre négatif.
Vous pouvez utiliser getTime pour définir une heure de début et de fin lors du calcul d'un temps écoulé. Il peut être utilisé pour mesurer de petites unités (telles que des secondes) et grandes unités (telles que des jours).
Détermination du temps écoulé en secondes
Cet exemple calcule le temps écoulé en secondes. Il fonctionne quelle que soit la longueur de l'intervalle. Les millisecondes indiquées par la méthode getTime sont une valeur absolue à partir de la date zéro. Par conséquent, elles augmentent perpétuellement via des modifications au niveau des minutes, des heures et des jours.
Console.Write("What is your name? ");
var startTime : Date = new Date();
var name : String = Console.ReadLine();
var endTime : Date = new Date();
var elapsed : Number =
(endTime.getTime() - startTime.getTime()) / 1000;
Console.WriteLine("You took " + elapsed +
" seconds to type your name.");
Détermination du temps écoulé en jours
Pour utiliser des unités plus pratiques, vous pouvez diviser les millisecondes fournies par la méthode getTime par un nombre approprié. Par exemple, pour convertir des millisecondes en jours, divisez le nombre par 86 400 000 (1000 x 60 x 60 x 24).
L'exemple suivant indique le temps qui s'est écoulé depuis le premier jour de l'année actuelle. Il utilise une suite de divisions pour calculer le temps écoulé en jours, heures, minutes et secondes. Il ne tient pas compte de l'heure d'été.
// Set the unit values in milliseconds.
var msecPerMinute : Number = 1000 * 60;
var msecPerHour : Number = msecPerMinute * 60;
var msecPerDay : Number = msecPerHour * 24;
// Determine the current date and time.
var today : Date = new Date();
// Determine January 1, at midnight, of the current year.
var january : Number = 0;
var startOfYear : Date = new Date();
startOfYear.setMonth(january);
startOfYear.setDate(1);
startOfYear.setHours(0, 0, 0, 0);
// Determine the difference in milliseconds.
var interval : Number = today.getTime() - startOfYear.getTime();
// Calculate how many days the interval contains. Subtract that
// many days from the interval to determine the remainder.
var days : Number = Math.floor(interval / msecPerDay );
interval = interval - (days * msecPerDay );
// Calculate the hours, minutes, and seconds.
var hours : Number = Math.floor(interval / msecPerHour );
interval = interval - (hours * msecPerHour );
var minutes : Number = Math.floor(interval / msecPerMinute );
interval = interval - (minutes * msecPerMinute );
var seconds : Number = Math.floor(interval / 1000 );
// Display the result.
var msg : String = days + " days, " + hours + " hours, "
+ minutes + " minutes, " + seconds + " seconds.";
print(msg);
Détermination de l'âge de l'utilisateur
L'exemple suivant détermine l'âge de l'utilisateur en années. Il soustrait l'année de naissance de l'année actuelle, puis soustrait 1 si la date d'anniversaire n'a pas été dépassée dans l'année en cours. Il n'utilise pas de millisecondes écoulées, étant donné que l'âge ne se base pas sur un intervalle strict.
var birthday : Date = new Date("8/1/1985");
var today : Date = new Date();
var years : Number = today.getFullYear() - birthday.getFullYear();
// Reset birthday to the current year.
birthday.setFullYear(today.getFullYear());
// If the user's birthday has not occurred yet this year, subtract 1.
if (today < birthday)
{
years--;
}
print("You are " + years + " years old.");
Notes
Lorsque vous comparez des dates, assurez-vous de le faire correctement. La section suivante de cette rubrique vous fournira plus d'informations à ce sujet.
L'exemple suivant montre une méthode permettant de calculer l'âge de l'utilisateur en mois. Le script inclut un test pour déterminer si l'anniversaire de l'utilisateur a eu lieu dans le mois en cours.
var birthday : Date = new Date("8/1/1985");
var today : Date = new Date();
var years : Number = today.getFullYear() - birthday.getFullYear();
// Determine the number of months.
var months : Number = (years * 12) +
(today.getMonth() - birthday.getMonth());
// Adjust the months if the birthday has not occurred
// yet in the current month.
if (today.getDate() < birthday.getDate())
{
months--;
}
print("You are " + months + " months old.");
Comparaison de dates
Dans JScript, si vous comparez des objets en utilisant les signes « supérieur à » ou « inférieur à » (<, >, < = ou > =), les valeurs des objets sont évaluées avant le début de la comparaison. Les comparaisons d'égalité fonctionnent différemment. Si vous utilisez l'opérateur ==, la comparaison retourne uniquement la valeur true si les deux côtés de l'opérateur font référence au même objet. L'opérateur != fonctionne de la même façon.
La getTime, méthode retourne le nombre de millisecondes entre le 1er janvier 1970 à minuit et la valeur d'heure dans l'Date, objet. Elle vous permet de comparer les représentations en millisecondes de deux dates.
Toutefois, une comparaison de date en millisecondes ne fonctionnera pas correctement si l'un des objets Date contient une autre heure que minuit.
Si vous créez un objet Date sans inclure un argument de constructeur, l'heure associée à la date sera l'heure actuelle. Si vous créez un objet Date pour une date spécifique, l'heure associée à la date sera minuit au début de ce jour.
L'exemple suivant vérifie si la date actuelle est la même qu'une date spécifiée. Pour définir la date actuelle dans todayAtMidn, le script crée un objet Date pour l'année, le mois et le jour actuels.
// Determine the current date and time, and then
// determine the current date at midnight.
var now : Date = new Date();
var todayAtMidn : Date =
new Date(now.getFullYear(), now.getMonth(), now.getDate());
// Set specificDate to a specified date at midnight.
var specificDate : Date = new Date("9/21/2009");
// Compare the two dates by comparing the millisecond
// representations.
if (todayAtMidn.getTime() == specificDate.getTime())
{
print("Same");
}
else
{
print("Different");
}