Временные зоны и GMT
По международному соглашению земной шар разделен на временные зоны, или часовые пояса. Это позволяет жителям каждой зоны считать, что солнце находится в зените примерно в полдень. Текущее время зоны называется локальным временем. Именно оно и устанавливается на наших обычных часах и часах компьютера.
Международным соглашением введена универсальная точка отсчета для времени. Этой точкой является “среднее” время по Гринвичу (Greenwich Mean Time или GMT), относительно которого локальное время в любой временной зоне вычисляется посредством добавления или вычитания определенной поправки. Сейчас для GMT существует еще одна аббревиатура — UTC. Она не имеет точной расшифровки ни на одном языка мира, но ее английская версия звучит так — Coordinated Universal Time (Всеобщее скоординированное время).
В операционной системе Windows при установке времени вы также задаете временную зону. Таким образом, при необходимости, в любой момент может быть вычислено текущее время UTC.
Перечисленные выше методы объекта Date работают с локальным временем. Однако существует масса случаев, когда может понадобиться работать в сценарии со временем UTC. Например, пользователь вашего Web-pecypca заполняет форму заказа. А вам нужно, чтобы при ее отправке вместе с данными были отправлены также дата и время ее заполнения. Но при этом вас скорее всего будет интересовать время отправки формы не по времени этого пользователя, а по вашему времени.
Наиболее простой способ вычисления времени UTC состоит в использовании метода getTimezoneOffset ( ), возвращающего величину смещения часового пояса в минутах шя локального времени (установленного на компьютере пользователя) относительно времени по Гринвичу (для Netscape Navigator) или универсального времени (для Internet Explorer). Например, после выполнения следующих инструкций локальное время в объекте today будет переведено во время UTC:
var today = new Date()
var offset = today.gwtTimezoneOffset()
today.setMinutes(today.getMinutes ( ) +offset)
Также существуют и специальные методы объекта Date для работы со временем UTC. Они имеют такие же названия, как и описанные выше, только между приставкой get (или set) и остальной частью имени метода должна быть вставлена аббревиатура UTC. Например, метод getUTCMonth () позволяет определить месяц UTC, а метод setUTCMinutes ( ) — установить минуты UTC. При этом, конечно, в одном объекте Date не содержится двух отдельных дат, т.е. все изменения, внесенные в локальное время, отразятся на времени UTC и наоборот.
Объект Data имеет следующие методы для извлечения и установки элементов даты и времени для универсального времени:
- getUTCDate —возвращает день месяца (число) для выбранной даты по универсальному времени;
- getUTCDay— возвращает день недели для выбранной даты по универсальному времени;
- getUTCFullYear —возвращает год для выбранной даты по универсальному времени;
- getUTCHours —возвращает часы для выбранной даты по универсальному времени;
- getUTCMilliseconds—возвращает миллисекунды для выбранной даты по универсальному времени;
- getUTCMinutes— возвращает минуты для выбранной даты по универсальному времени;
- getUTCMonth —возвращает месяц для выбранной даты по универсальному времени;
- getUTCSeconds —возвращает секунды для выбранной даты по универсальному времени;
- setUTCDate —устанавливает день месяца для выбранной даты по универсальному времени;
- setUTCFullYear —задает полный год для выбранной даты по универсальному времени;
- setUTCHours —устанавливает часы для выбранной даты по универсальному времени;
- setUTCMilliseconds —определяет миллисекунды для выбранной даты по универсальному времени;
- setUTCMinutes —устанавливает минуты для выбранной даты по универсальному времени;
- setUTCMonth —задает месяц для выбранной даты по универсальному времени;
- setUTCSeconds —определяет секунды для выбранной даты по универсальному времени;
- UTC —возвращает количество миллисекунд в объекте Date с 00:00:00 1 января 1970 года.
Все методы, касающиеся универсального времени, появились в версии JavaScript 1.3. Методы для работы с универсальным временем полностью аналогичны методам для работы с локальным временем. Исключение составляет метод UTC.