Вычисления даты и времени
Объект Объект Date и зависимые методы используются для выполнения общих задач, связанных с календарем и часами, таких как манипулирование датами, их сравнение и вычисление затраченного времени.
Установка текущей даты
При создании экземпляр Объект Date содержит значение, которое представляет конкретный момент во времени с точностью до миллисекунд. В дальнейшем вы можете прочитать или изменить это значение даты и времени.
Следующий пример показывает, как получить текущую дату и представить ее в формате мм/дд/гг.
// 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);
Установка определенной даты
В следующем примере определенная дата передается конструктору.
// Create a date object for a specific date.
var dt : Date = new Date('8/24/2009');
JScript достаточно гибок в отношении формата даты. Он допускает такие варианты, как 8-24-2009, Август 24, 2009 и 24 Авг 2009.
Можно также задать время, как показано в следующем примере.
// 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);
Добавление и вычитание дней
В предыдущем примере для получения частей даты используются методы getMonth, getDate and getFullYear. Эквивалентная группа заданных методов позволяет менять значение в объекте Date.
В следующем примере показано, как установить в качестве даты дату предыдущего дня. После получения даты текущего дня и дня месяца Метод setDate устанавливает день на день раньше.
// 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 по требованию увеличивает дату до следующего месяца или года. Например, если текущая дата — 28 января и вы добавляете 7 дней, программа правильно установит в качестве даты 4 февраля. В следующем примере к текущей дате добавлена одна неделя. В этом примере из даты также удалено время.
var myDate : Date = new Date();
myDate.setDate(myDate.getDate() + 7);
// Clear the time.
myDate.setHours(0, 0, 0, 0);
Работа с месяцами и годами
В следующем примере содержится цикл, который выводит даты начиная с 1 месяца от текущей даты. Месяцы правильно увеличиваются до следующего года.
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);
}
В следующем примере получена дата на год раньше текущей.
var myDate : Date = new Date();
myDate.setFullYear (myDate.getFullYear() - 1);
В следующем примере получен первый день месяца, следующего за текущим. Номер месяца увеличен и задан первый день месяца.
function GetFirstOfNextMonth() : Date
{
var myDate : Date = new Date();
myDate.setMonth(myDate.getMonth() + 1);
myDate.setDate(1);
return myDate;
}
В следующем примере определен последний день текущего месяца. Для этого определен первый день следующего месяца и вычтен один день.
// 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);
Работа с днями недели
Метод Метод getDay (не путать с getDate) возвращает значение от 0 до 6 для указания дня недели. Воскресенью соответствует 0, понедельнику — 1 и т.д. В следующем примере показано, как определяется текущий день недели.
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];
В следующем примере отражена дата пятницы, предшествующей текущей дате.
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);
В следующем примере определена дата для праздника Дня Благодарения в США, который приходится на четвертый четверг ноября. Скрипт находит 1 ноября текущего года, затем первый четверг и прибавляет три недели.
// 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);
Подсчет затраченного времени
Метод Метод getTime отображает количество миллисекунд, которые прошли с принятой в качестве точки отсчета полуночи 1 января 1970 г. Для даты, предшествующей этой дате, getTime отображает отрицательное число.
Можно использовать getTime для установки начального и конечного времени для подсчета затраченного времени. Это можно использовать для измерения коротких единиц, таких как несколько секунд, и больших единиц, таких как дни.
Определение затраченного времени в секундах
В этом примере затраченное время подсчитывается в секундах. Это производится независимо от величины интервала. Представленные методом getTime миллисекунды являются абсолютным значением от точки отсчета. Поэтому они увеличиваются в результате изменений в минуте, часе и дне.
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.");
Определение затраченного времени в днях
Для работы с более легко управляемыми единицами можно разделить миллисекунды, представленные методом getTime, на подходящее число. Например, для превращения миллисекунд в дни можно разделить их количество на 86400000 (1000 x 60 x 60 x 24).
В следующем примере показано, сколько времени прошло с первого дня текущего года. Для этого использована последовательность операций деления для подсчета затраченного времени в днях, часах, минутах и секундах. Летнее время не принято во внимание.
// 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);
Определение возраста пользователя
В следующем примере определен возраст пользователя в годах. Год рождения вычитается из текущего года, и из получившегося результата вычитается 1, если день рождения в текущем году еще не наступил. Затраченные миллисекунды не используются, потому что наше определение возраста не основано на строгом интервале.
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.");
Примечание
При сравнении дат следует проявлять осторожность, чтобы убедиться, что вы делаете это правильно.Дополнительные сведения об этом можно получить в следующей секции этого раздела.
В следующем примере показан один метод подсчета возраста пользователя в месяцах. Скрипт включает тест для определения, имел ли место день рождения пользователя в текущем месяце.
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.");
Сравнение дат
В JScript значения объектов оцениваются до проведения сравнения, если вы сравниваете объекты с использованием понятий "больше" или "меньше" (<, >, <= или >=). Сравнения на равенство работают по-другому. При использовании оператора == операция сравнения возвращает значение true, только если обе стороны оператора относятся к одному и тому же объекту. Оператор != действует подобным образом.
Метод Метод getTime отображает количество миллисекунд, истекших с полуночи 1 января 1970 г. до значения времени, сохраненного в объекте Объект Date. Это позволяет сравнивать представления двух дат в миллисекундах.
Сравнение дат, основанное на миллисекундах, не выполняется правильно, если один из объектов Date содержит отличное от полуночи время.
При создании объекта Date без включения аргумента конструктора временем, ассоциируемым с датой, будет текущее время. При создании объекта Date для определенной даты временем, ассоциируемым с этой датой, будет полночь в начале этого дня.
В следующем примере проверяется, совпадает ли текущая дата с заданной датой. Для установки текущей даты в todayAtMidn скрипт создает объект Date для текущего года, месяца и дня.
// 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");
}