Дата и время
|
Автор: Артемьев Сергей Игоревич 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).
Следование этим правилам избавит вас от большинства логических багов и недочётов, а значит сделает ваш код более стабильным и качественным.