Дата и время
Автор: Артемьев Сергей Игоревич ICQ: 438856621 email: _spin_@bk.ru |
Для работы с датой и временем в JavaScript существует специальный объект - Date. Этот объект поддерживается практически всем версиями JavaScript, а зачит им можно пользоваться не оглядываясь на проблемы совместимости.
Дата и время в объекте Date хранятся не в явном виде, а как и в большинстве языков программирования - в виде количества миллисекунд, прошедших с дня рождения Unix, т.е. с 0 часов 0 минут 1 января 1970 года. Отличительная особенность объекта Date - все диапазонные значения имеют индексы, начинающиеся с нуля. Это означает, что январь будет иметь индекс 0 (месяц №0), а декабрь будет не двенадцатым, а одиннадцатым месяцем. То же самое справедливо и для дней недели, часов, минут и пр.
Создать объект Date очень просто:
// текущая дата-время var date = new Date(); // дата-время из строки или числа var date = new Date(дата); // дата-время из отдельных значений var date = new Date(год, месяц, день, час, минута, секунда, миллисекунда);
Объект Date обладает рядом очень полезных методов, позволяющих работать с отдельными компонентами даты-времени, а так же проводить проверку коррестности и правильный вывод даты в заданном формате.
Методы получения компонентов даты-времени | |
getFullYear | Возвращает год (например, 2011). |
getYear | Возвращает год. Назначение метода getYear аналогично назначению getFullYear, однако данный метод является устаревшим и не рекомендуются к использованию, т.к. результаты его работы не однозначны: для диапазона дат от 1900 до 1999 года метод возвращает номер года в столетии (двузначный, например 77), а для дат за пределами этого диапазона - возвращается полное значение (четырёхзначное, например 2009). |
getMonth | Возвращает месяц. |
getDate | Возвращает день месяца (число в месяце). |
getHours | Возвращает час. |
getMinutes | Возвращает минуту. |
getSeconds | Возвращает секунду. |
getMilliseconds | Возвращает миллисекунду. |
getDay | Возвращает номер деня недели. |
getTime | Возвращает миллисекундное смещение, хранимое объектом. |
Методы изменения компонентов даты-времени | |
setFullYear | Устанавливает год. |
setYear | Устанавливает год. Назначение метода setYear аналогично назначению setFullYear, однако данный метод является устаревшим и не рекомендуются к использованию (так же как и метод getYear). |
setMonth | Устанавливает месяц. |
setDate | Устанавливает дату в месяце (день месяца). |
setHours | Устанавливает час. |
setMinutes | Устанавливает минуту. |
setSeconds | Устанавливает секунду. |
setMilliseconds | Устанавливает миллисекунду. |
setTime | Устанавливает миллисекундное смещение относительно 00:00:00 01.01.1970 |
Фунции форматирования и вывода даты-времени | |
toString | Возвращает строковое представление даты и времени. |
toUTCString | Возвращает строковое представление даты и времени с пересчётом на время UTC. Формат возвращаемой строки учитывает все интернет-стандарты. |
toGMTString | Возвращает строковое представление даты и времени с пересчётом на время GMT (время по Гринвичу). Формат возвращаемой строки учитывает все интернет-стандарты. |
toLocaleString | Аналог toString, но возвращает строковое представление даты и времени, отформатированное в соответствии с настройками локализации данного пользователя. |
toTimeString | Возвращает строковое представление времени (строка содержит только время). |
toDateString | Возвращает строковое представление даты (строка содержит только дату). |
toLocaleTimeString | Аналог toTimeString, но возвращает строковое представление времени, отформатированное в соответствии с настройками локализации пользователя. |
toLocaleDateString | Аналог toDateString, но возвращает строковое представление даты, отформатированное в соответствии с настройками локализации пользователя. |
Дополнительные функции | |
getTimezoneOffset | Возвращает смещение локального времени на компьютере пользователя относительно времени UTC. Смещение возвращается в минутах. |
parse | Функция позволяет проверить корректность даты-времени, записанных в виде строки. Если строка корректная - сразу будет создан объект Date. |
Так же объект Date содержит ряд методов для работы с UTC-датами. Эти функции полностью аналогичны уже рассмотреным, но содержат в имени префикс "UTC" и работают только с "универсальным" временем: getUTCSeconds, setUTCFullYear и т.д.
Рассмотрим пример работы с датами:
<script type="text/javascript"> var tmp = new Date(now.getTime()); var arrNames = new Array('Сегодня', 'Завтра', 'Через 1 год 6 месяцев 15 дней'); var arrNormal = new Array(); var arrLocal = new Array(); var arrUTC = new Array(); // сейчас arrLocal[0] = tmp.toLocaleString(); arrNormal[0] = tmp.toString(); arrUTC[0] = tmp.toUTCString(); // завтра tmp.setDate(tmp.getDate() + 1); arrLocal[1] = tmp.toLocaleString(); arrNormal[1] = tmp.toString(); arrUTC[1] = tmp.toUTCString(); // через 1 год 6 месяцев 15 дней tmp.setFullYear(tmp.getFullYear() + 1); tmp.setMonth(tmp.getMonth() + 6); tmp.setDate(tmp.getDate() + 15); arrLocal[2] = tmp.toLocaleString(); arrNormal[2] = tmp.toString(); arrUTC[2] = tmp.toUTCString(); // выводим результаты в таблицу document.write('<table border="0"><tr>' + '<td>Дата</td>' + '<td>Локализованная</td>' + '<td>Не локализованная</td>' + '<td>UTC</td></tr>'); for (i = 0; i < 3; i++) { document.write('<tr>' + '<td>' + arrNames[i] + '</td> + '<td>' + arrLocal[i] + '</td> + '<td>' + arrNormal[i] + '</td> + '<td>' + arrUTC[i] + '</td> + '</tr>' ); } document.write('</table>'); </script>
А вот результат работы этого скрипта:
Как видите, представление даты существенно отличается в зависимости от используемого формата. Поэтому при работе с датой-временем надо придерживаться нескольких простых правил:
1. По возможности пользоваться UTC или GMT-форматами. Особенно это важно при создани распределённых решений (например, клиентов платёжных систем). Использование общего опорного времени даст вам гарантии (пусть и не стопроцентные), что и вы и ваш удалённый партнёр будете одинаково интерпретировать получаемые данные.
2. Локализованные дату и время имеет смысл использовать только при выводе их пользователю. Во всех остальных случаях от локализованных данных лучше отказаться.
3. Если всё же приходится использовать локальные дату и время - не забывайте учитывать смещение локального времени относительно опорного (UTC или GMT).
Следование этим правилам избавит вас от большинства логических багов и недочётов, а значит сделает ваш код более стабильным и качественным.