Работа с датой в JScript
Бытует мнение, что с датой работать в VBScript удобнее, чем в JScript. Надеюсь, что это так и останется чьим-то мнением, потому как мы сейчас досконально разберемся что можно вытворять со временем и датой на JScript.
Для начала изучим список всех свойств и методов объекта Date, который можно найти здесь:
методы и свойства объекта Date, Объект Date в JScript.
Создание объекта даты в JScript
Объект даты можно создать и инициализировать несколькими способами. Способ первый - задать в конструкторе:
var d = new Date("Wed, 12 Apr 2006 05:06:13 +0400");
Заметьте, что дату нужно устанавливать в формате UTC (это все одно и то же: coordinated universal time, universal time, world time, Гринвичское среднее время - GMT), в соответствии с текущим часовым поясом - за это отвечают символы “+0400″ в конце строки. Например для Москвы это будет +4 часа летом и +3 часа зимой.
Существуют следующие правила перевода даты из текстовой строки:
- Для краткого формата даты допускается использование разделителей “/” или “-”, но порядок элементов должен быть строго “месяц/день/год”, например “7/20/96″.
- Для полного формата даты порядок указания элементов может быть произвольным. Если используется два знака для обозначения года, то число должно быть меньше 70 для указания 21-го века. Например “July 10 1995″.
- Любой текст в круглых скобках рассматривается как комментарии. Комментарии могут быть вложенными, например: “July 10 1995 (this (1234) is a comment)”.
- Запятые и пробелы рассматриваются как разделители, могут повторяться.
- Месяца и дни недели должны иметь два и больше знаков. Если в двузначном написании элементы становятся идентичными, то используется последнее значение, например “Ju” это Июль, а не Июнь.
- Если в полном формате даты указан неверный день недели, то он игнорируется.
- JScript обрабатывает все стандартные временные зоны, включая UTC и GMT.
- Значения для часов, минут и секунд могут быть пропущены, например “10:”, “10:11″, и “10:11:12″.
- Если время указано в 24-часовом формате, то указание полудня считается ошибкой, например “23:15 PM” - ошибка.
- Строка, содержащая неправильную дату - ошибочна. Например, строка содержащая два года или два месяца.
В качестве параметра конструктор может принимать дату в формате Variant с типом VT_DATE. Таким образом можно легко получать и манипулировать датой из других приложений. К сожалению конструктор, как и функция parse(), не умеет работать с локализованными датами и не понимает русские названия месяцев.
Второй способ задать дату - установить каждый элемент отдельно:
var d = new Date(); // Текущая дата и время d.setDate(12); d.setMonth(3); // Месяца от 0 до 11 d.setFullYear(2006); d.setHours(05); d.setMinutes(06); d.setSeconds(13); d.setMilliseconds(50);
Опять же время и дата устанавливается в соответствии с текущим часовым поясом, который установлен в панели управления Windows. С помощью функции setFullYear() [setMonth()] можно установить не только год, но и месяц с днем [день]:
var d = new Date(); // Текущая дата и время d.setFullYear(2006, 3, 12); // d.setMonth(3, 12);
Получение элементов даты в JScript
Для получения элементов даты существуют соответствующие методы get*:
var d = new Date(); // Возмется текущая дата и время
var day = TwoDigits(d.getDate());
var month = TwoDigits(d.getMonth()+1);
var year = d.getFullYear(); // getYear();var dayOfWeek = d.getDay(); // День недели от 0 (воскресенье) до 6 (суббота)
var hours = TwoDigits(d.getHours())
var minutes = TwoDigits(d.getMinutes())
var sec = TwoDigits(d.getSeconds())
var msec = d.getMilliseconds();
function TwoDigits(s){
if(s<10){s = '0'+s;}else{s = ''+s;} return(s)
}
Для удобства отображения частей дат используйте функцию TwoDigits(), которая добавляет в начало символ “0″ если число состоит из одного символа. Для получения дат в формате UTC нужно использовать свои функции с префиксом UTC (getUTCDate(), getUTCDay() и так далее).
Получение даты из строки
Для перевода текстовой строки в формат даты предназначена функция parse(), которая возвращает количество миллисекунд относительно полночи 1-го января 1970 года. Это статический метод, который можно вызывать без создания объекта даты:
var ms = Date.parse("November 1, 1997 10:15 AM");
if(ms){ // если дата определилась правильно, то выводим на экран
WScript.echo(ms);
var newDate = new Date("1 jan 1970");
newDate.setMilliseconds(ms);
WScript.echo(newDate); // выводим на экран полученную дату: Sat Nov 1 07:15:00 UTC+0300 1997
}
Правила перевода строки в дату аналогичны функции конструктора (см. выше).
Существует также функция UTC(), которая в качестве параметров получает составные элементы даты и возвращает количество миллисекунд относительно полночи 1-го января 1970 года:
function UTC(year, month, day[, hours[, minutes[, seconds[,ms]]]]) : Number
Получение строки из даты
В JScript таких функций предостаточно, вот полный список с результатами:
var d = new Date("Wed, 12 Apr 2006 05:06:13 +0000");
WScript.echo(d); // Wed Apr 12 05:06:13 UTC+0400 2006
WScript.echo(d.toDateString()); // Wed Apr 12 2006
WScript.echo(d.toGMTString()); // Wed, 12 Apr 2006 01:06:13 UTC
WScript.echo(d.toLocaleDateString()); // 12 апреля 2006 г.
WScript.echo(d.toLocaleString()); // 12 апреля 2006 г. 5:06:13
WScript.echo(d.toLocaleTimeString()); // 5:06:13
WScript.echo(d.toString()); // Wed Apr 12 05:06:13 UTC+0400 2006
WScript.echo(d.toTimeString()); // 05:06:13 UTC+0400
WScript.echo(d.toUTCString()); // Wed, 12 Apr 2006 01:06:13 UTC
Получение и установка объекта даты из свойств элементов Microsoft Outlook
Для перевода любого свойства с типом даты в объект Date нужно выполнить следующее преобразование:
var d = new Date(mailItem.CreationTime);
Для установки свойств следует воспользоваться методом getVarDate(), который возвращает дату в формате VT_DATE.
var d = new Date(); mailItem.CreationTime = d.getVarDate();
Работа с датой - следующий день, месяц, год
Для сдвига даты на день, месяц или год нужно использовать методы setDate(), setMonth() и setYear() соответственно. Та же самая картина с часами, минутами и секундами. Например:
var d = new Date("Wed, 12 Apr 2006 05:06:13 +0400");
d.setDate(d.getDate() + 25); // прибавление 25 дней, результат: Sun May 7 09:06:13 UTC+0400 2006
d.setMinutes(d.getMinutes() + 60 * 20); // прибавление 20 часов, результат: Thu Apr 13 01:06:13 UTC+0400 2006
// и т.д.
С помощью встроенных функций в объект Date JScript предоставляет широкие возможности по работе с датой и временем.



Алсу @ 17 августа 2007 12:26
Здравствуйте!
А возможность получения номера недели по дате - в JScript есть?
Andrew @ 18 августа 2007 12:48
Есть конечно - dateObj.getDay()
Outlook Blogger @ 6 сентября 2008 19:58
Очень полезный FAQ по работе с датами в JavaScript: http://www.irt.org/script/date.htm