JavaScript Объект дата
17-03-2009 21:25
к комментариям - к полной версии
- понравилось!
8.5. Объект Date (Дата)
Во многих приложениях приходится отображать дату и время, подсчитывать количество дней, оставшихся до заданной даты и т. п. Некоторые программы даже управляются посредством значений дат и времени. В основе всех операций, связанных с датами и временем, лежат текущие системные дата и время, установленные на вашем компьютере. Со временем дела обстоят не так просто, как кажется на первый взгляд. Вспомните, что существуют временные зоны (часовые пояса), а также сезонные поправки времени. Так например, текущее время в Санкт-Петербурге отличается от времени в Иркутске на 5 часов. Если в Иркутске уже полночь, то в Петербурге еще только 19 часов. Чтобы иметь возможность координировать деятельность во времени организаций и физических лиц в различных точках нашей планеты, была введена система отсчета времени. Она связана с меридианом, проходящим через астрономическую обсерваторию в городе Гринвич в Великобритании. Эту временную зону называют cредним временем по Гринвичу (Greenwich Mean Time — GMT). Недавно кроме аббревиатуры GMT стали использовать еще одну — UTC (Coordinated Universal Time — Всеобщее Скоординированное Время).
Если системные часы вашего компьютера установлены правильно, то отсчет времени производится в системе GMT. Однако на Панели управления обычно устанавливается локальное время, соответствующее вашему часовому поясу. При создании и изменении файлов на вашем компьютере фиксируется именно локальное время. Вместе с тем операционная система знает разницу между локальным временем и GMT. При перемещении компьютера из одного часового пояса в другой, необходимо изменить установки именно часового пояса, а не текущего системного времени (показания системных часов). Даты и время, генерируемые в сценариях, сохраняются в памяти в системе GMT, но пользователю выводятся, как правило, в локальном виде. В программе на JavaScript нельзя просто написать 30.10.2002, чтобы получить значение даты, с которым в дальнейшем можно производить некие операции. Значения даты и времени создаются как экземпляры специального объекта Date. При этом объект сам будет «знать», что не бывает 31 июня и 30 февраля, а в високосных годах 366 дней.
Создание объекта даты
Объект даты создается с помощью выражения вида:
имяОбъектаДаты = new Date([параметры])
Параметры не обязательны, на что указывают квадратные скобки. Обратите внимание, что имяОбъектаДаты является объектом даты, а не значением какого-нибудь другого типа (например, строкой или числом). Для манипуляций с объектом даты применяется множество методов объекта Date. При этом используется такой синтаксис:
переменная = имяОбъектаДаты.метод()
Если, например, объекту даты требуется присвоить новое значение, то для этого используется соответствующий метод:
переменная = имяОбъектаДаты.метод(новое_значение)
Рассмотрим в качестве примера изменение значения года текущей системной даты:
xdate = new Date() /* создание объекта, содержащего текущую дату и время */
Year = xdate.getYear() /* в переменной Year содержится значение текущего года */
Year = Year + 3 /* в переменной Year содержится значение,
большее, чем текущий год на 3 */
xdate.setYear(Year) /* в объекте устанавливается новое
значение года */
При создании объекта даты с помощью выражения new Date(), можно указать в качестве параметров, какую дату и время следует установить в этом объекте. Это можно сделать пятью способами:
new Date("Месяц дд, гггг чч:мм:сс")
new Date("Месяц дд, гггг")
new Date(гг, мм, дд, чч, мм, сс)
new Date(гг, мм, дд)
new Date(милисекунды)
В первых двух способах параметры задаются в виде строки, в которой указаны компоненты даты и времени. Буквенные обозначения определяют шаблон параметров. Обратите внимание на разделители — запятые и двоеточия. Время указывать не обязательно. Если компоненты времени опущены, то устанавливается значение 0 (полночь). Компоненты даты обязательно должны быть указаны. Месяц указывается как полное его английское название (аббревиатуры не допускаются). Остальные компоненты указываются в виде чисел. Если число меньше 10, то можно писать одну цифру, не записывая ведущий 0 (например, 3:05:32). В третьем и четвертом способах компоненты даты и времени представляются целыми числами, разделенными запятыми. В последнем способе дата и время задаются целым числом, которое представляет количество миллисекунд, прошедших с начала 1 января 1970 года (то есть с момента 00:00:00). Количество миллисекунд, отсчитанное от указанной стартовой даты, позволяет вычислить все компоненты и даты, и времени.
Методы объекта Date
Для чтения и изменения информации о дате и времени, хранящейся в объекте даты, служат методы объекта Date (см. таблицу). Напомним, что объект даты создается с помощью выражения:
имяОбъектаДаты = new Date([параметры])
Затем, чтобы применить метод метод() к объекту даты имяОбъектаДаты, следует написать: имяОбъектаДаты.метод([параметры]). Довольно большое множество всех методов можно разделить на две категории: методы получения значений (их названия имеют префикс get) и методы установки новых значений (их названия имеют префикс set). В каждой категории выделяются две группы методов — для локального формата и формата UTC. Методы позволяют работать с отдельными компонентами даты и времени (годом, месяцем, числом, днем недели, часами, минутами, секундами и милисекундами).
Методы объекта Date
Метод Диапазон значений Описание
getFullYear( ) 1970–... год
getYear( ) 70–... год
getMonth( ) 0–11 месяц (январь = 0)
getDate( ) 1–31 число
getDay( ) 0–6 день недели (воскресенье = 0)
getHours( ) 0–23 часы в 24-часовом формате
getMinutes( ) 0–59 минуты
getSeconds( ) 0–59 секунды
getTime( ) 0–… миллисекунды с 1.1.70 00:00:00 GMT
getMilliseconds( ) 0–… миллисекунды с 1.1.70 00:00:00 GMT
getUTCFullYear( ) 1970-... год UTC
getUTCMonth( ) 0–11 месяц UTC (январь = 0)
getUTCDate( ) 1–31 число UTC
getUTCDay( ) 0–6 день недели UTC (воскресенье = 0)
getUTCHours( ) 0–23 часы UTC в 24-часовом формате
getUTCMinutes( ) 0–59 минуты UTC
getUTCSeconds() 0–59 секунды UTC
getUTCMilliseconds( ) 0–.... миллисекунды UTC с 1.1.70 00:00:00 GMT
setYear(знач) 1970–... установка года (четырехзначного)
SetFullYear(знач) 1970–… установка года
setMonth(знач) 0–11 установка месяца (январь = 0)
setDate(знач) 1–31 установка числа
setDay(знач) 0–6 установка дня недели (воскресенье = 0)
setHours(знач) 0–23 установка часов в 24-часовом формате
setMinutes(знач) 0–59 установка минут
setSeconds(знач) 0–59 установка секунд
setMilliseconds(знач) 0–… установка миллисекунд с 1.1.70 00:00:00 GMT
setTime(знач) 0–… установка миллисекунд с 1.1.70 00:00:00 GMT
setUTCFullYear(знач) 1970–… установка года UTC
setUTCMonth(знач) 0–11 установка месяца UTC (Январь = 0)
setUTCDate(знач) 1–31 установка числа UTC
setUTCDay(знач) 0–6 установка дня недели UTC (воскресенье = 0 )
setUTCHours(знач) 0–23 установка часов UTC в 24-часовом формате
setUTCMinutes(знач) 0–59 установка минут UTC
setUTCSeconds(знач) 0–59 установка секунд UTC
setUTCMilliseconds(знач)0–… установка миллисекунд UTC с 1.1.70 00:00:00 GMT
getTimezoneOffset ( ) 0–… разница в минутах по отношению к GMT/UTC
toDateString( ) строка с датой (без времени) в формате браузера (IE5.5)
toGMTString( ) строка с датой и временем в глобальном формате
toLocaleDateString( ) строка с датой без времени в локализованном формате системы (NN6, IE5.5)
toLocaleString( ) строка с датой и временем в локализованном формате системы
toLocaleTimeString( ) строка с временем без даты и в локализованном формате системы (NN6, IE5.5)
toString( ) строка с датой и временем в формате броузера
toTimeString( ) строка с временем без даты в формате броузера (IE5.5)
toUTCString() строка с датой и временем в глобальном формате
Date.parse("dateString") преобразование строки с датой в число миллисекунд
Date.UTC(знач) преобразование строки с датой GMT в число
Вычислять разность двух дат или создавать счетчик времени, оставшегося до некоторого заданного срока, можно с помощью методов как для локального формата, так и UTC. Не следует применять выражения, использующими различные форматы времени, поскольку результаты могут оказаться неправильными. Формат UTC обычно применяется в расчетах, учитывающих часовой пояс. Следует также учитывать, что нумерация месяцев, дней недели, часов, минут и секунд начинается с 0. Для компонент времени это естественно. Однако при такой нумерации декабрь оказывается 11-м месяцем в году, а не 12-м, как это принято повсеместно. Воскресенье (Sunday) является 0-м днем недели, а не 7-м. Значение года XX века представляется в двухзначном формате как разность между этим годом и 1900. Например, 1996 год представляется как 96. Годы до 1900 и после 1999 обозначаются в четырехзначном формате. Например, 2005 год нужно так и писать — 2005, поскольку 05 это 1905 год. Метод getFullYear() возвращает четырехзначное значение года.
Изменение любой компоненты даты производится с помощью соответствующего метода, название которого начинается с приставки set. При этом значения других компонент пересчитываются автоматически.
В следующем примере мы создаем объект даты, содержащий некоторую конкретную дату. Затем мы устанавливаем новое значение года. При этом в объекте даты изменяется и число. При попытке отобразить значение объекта даты оно автоматически преобразуется в строку методом toString(). Формат этой строки зависит от операционной системы и браузера. Например, для Windows 98 и Internet Explorer 5.5+ строка, содержащая информацию объекта даты, имеет следующий вид: Thu Oct 31 13:16:23 UTC+0300 2002, то есть четверг, октябрь, 31, 13 часов 16 минут 23 секунды Всеобщего времени, скорректированного на 3 часа, 2002 год
Если коррекцию времени с учетом часового пояса производить не требуется, то для строкового представления даты и времени можно воспользоваться методом toLocaleString():
mydate = new Date()
mydate.toLocaleString() // "1 декабря 2004 г. 14:13:36"
В браузерах IE5.5+ и NN6+ работают еще два метода представления отдельно даты и времени в виде строки:
mydate = new Date()
mydate.toLocaleDateString() // "1 декабря 2004 г."
mydate.toLocaleTimeString() // "14:13:36"
Заметим, что формат представления даты и времени, обеспечиваемый методами toLocalDateString() и toLocalTimeString(), зависит от настроек операционной системы и браузера. Если вы будете использовать эти методы для вывода даты и времени на Web-страницу, то они будут выглядеть так, как пользователь привык их видеть на своем компьютере. С датой иногда приходится выполнять различные вычисления, такие, как определение даты через заданное количество дней от текущей, или количество дней между двумя датами. Вот здесь как раз и требуется предварительный подсчет миллисекунд, содержащихся в минуте, часе, сутках и т. д.
Примеры:
Определим дату, которая наступит через неделю относительно текущей:
week = 1000*60*60*24*7 /* количество миллисекунд в неделе — 604800000 */
mydate = new Date() // объект даты с текущей датой
mydate_ms = mydate.getTime() /* текущая дата, представленная количеством миллисекунд от 1.01.1970 00:00:00 */
mydate_ms += week // maydate_ms = mydate_ms + week
mydate.setTime(mydate_ms) /* установка новой даты в объекте mydate */
newdate = mydate.toLocaleString() /* новая дата в виде строки */
Определим количество дней между двумя датами, например, 10 февраля 2004 и 5 марта 2004. Для этого создадим сначала два соответствующих объекта даты:
date1 = new Date(2004,01,10)
date2 = new Date(2004,02,5)
Переменные date1 и date2 содержат длинные строки, содержащие даты (например, Mon Feb 10 00:00:00 UTC+0300 2003). Чтобы перевести их в количества миллисекунд, воспользуемся методом parse() объекта Date. Затем вычислим разность Date.parse(date2) и Date.parse(date1) и разделим ее на количество миллисекунд в одних сутках:
days = (Date.parse(date2) - Date.parse(date1))/1000/60/60/24 // результат: 24
вверх^
к полной версии
понравилось!
в evernote