В языке JavaScript для доступа к дате и времени, а также для выполнения различных операций с подобными значениями используется объект Date
Объект Date позволяет работать не только с текущей датой, но и с любой датой вообще. Поэтому он не относится к статическим объектам. Самое важное, что следует помнить при работе с текущей датой и временем — это то, что они берутся из показаний часов, установленных на компьютере пользователя, а не пересылаются с сервера. А это означает, что они вполне могут не соответствовать действительности.
Для создания объекта Date можно воспользоваться одним из следующих способов.
- Создать объект, содержащий текущую дату и время:
var date = new Date()
- Получить объект, содержащий дату 1 января 2005 года и время: 0:00:00.:
var date = new Date (2005, 0, 1)
- Создать объект, содержащий дату 7 декабря 2006 года и время: 18:30:10.
var date = new Date(2006, 11, 7, 18, 30, 10)
Все операции с датами и временем производятся с помощью двух групп методов объекта Date. Первая группа служит для получения информации о дате и времени — ее методы начинаются со слова get и их использование никак не влияет на содержимое объекта Date. Вторая группа методов служит для внесения изменений в экземпляр объекта Date. Методы этой группы начинаются со слова set.
|
|
Результатами всех методов, извлекающих информацию из объекта Date, являются числа. Поэтому при их использовании следует помнить о нумерации месяцев и дней недели в датах языка JavaScript. Январю соответствует номер месяца 0, а декабрю — 11. Воскресенью соответствует номер дня недели 0, понедельнику — 1, а субботе — 6. Для того чтобы вывести дату с использованием названий дней недели и месяцев, можно применить способ, представленный в листинге.
Листинг: Отображение в браузере русских названий для дней недели и месяцев
<HTML> <HEAD>
<TITLE>Вывод даты по-русски</TITLE> </HEAD> <BODY>
<SCRIPT>
function dateString(date) {
var days = new Array('воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота')
var months = new Array ('января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября ', 'ноября','декабря')
var str = days [date.getDay()]+', '
str += date.getDate() +' '+ months [date.getMonth()] + ' '
str += date.getFullYear() + ' года.'
return str
}
var today = new Date ()
document.write('Сейчас ', dateString(today))
</SCRIPT>
</BODY>
<HTML>
Результат листинга: Сегодняпонедельник, 5 июня 2006 года
Листинг содержит различные методы, предназначенные для получения информации из объекта Date. Полный перечень этих методов представлен ниже.
- getFullYear() — возвращает год для выбранной даты по местному времени (значение представляется в диапазоне от 1000 до 9999). Существует также другой метод для определения года — getYear(). Он возвращает сокращенную запись года в виде двух последних цифр. Однако для дат начиная с 2000 года использовать данный метод не рекомендуется, поскольку во многих браузерах он работает неправильно.
- getMonth() — возвращает месяц для выбранной даты по местному времени. Результат — число от 0 до 11.
- getDate() — возвращает день месяца (число) для выбранной даты по местному времени. Результат — число от 1 до 31.
- getDay() — возвращает день недели для выбранной даты по местному времени. Результат — число от 0 до 6.
- getHours() — возвращает час в 24-часовом формате для выбранной даты по местному времени. Результат — число от 0 до 23.
- getMinutes() — возвращает минуты для выбранной даты по местному времени. Результат — число от 0 до 59.
- getSeconds() — возвращает секунды для выбранной даты по местному времени. Результат — число от 0 до 59.
- getMilliseconds() — возвращает миллисекунды для выбранной даты по местному времени. Результат — число от 0 до 999.
- getTimezoneOffset() — определяет сдвиг в минутах локального времени на компьютере пользователя относительно времени UTC (см. ниже врезку "Временные зоны и GMT").
- getTime() — возвращает числовое значение, соответствующее выбранной дате по местному времени — количество миллисекунд, прошедшее от 0:00:00 UTC 1 января 1970 года до заданной даты. Данное значение само по себе никакой ценности не представляет, но может использоваться для внесения относительных изменений в дату, вычисления промежутков между двумя датами и т.п. При применении данного метода полезными могут оказаться следующие числа, соответствующие количеству миллисекунд в том или ином промежутке времени:
- 1 секунда = 1000;
- 1 минута = 60 000;
- 1 час = 3 600000;
- 1 сутки = 86 400 000;
- 1 год (365 дней) = 31 536 000 000.
В качестве примера применения метода getDate() можно привести сценарий, вычисляющий, сколько времени осталось до Нового года (Листинг 2).
|
|
Листинг 2. Определение времени, оставшегося до Нового года
<HTML> <HEAD>
<TITLE>Сколько осталось до Нового года</TITLE> </HEAD>
<BODY>
<SCRIPT>
var today = new Date()
var newYearDay = new Date(today.getFullYear()+1, 0, 1)
var day = 86400000
var hour = 3600000
var minute = 60000
var time = newYearDay.getTime() - today.getTime()
var days = Math.floor(time/day)
var hours = Math.floor((time - days*day)/hour)
var minutes = Math.floor((time - days*day - hours*hour)/minute)
var str = days + ' дней, '+ hours + ' часов, ' + minutes + ' минут. '
document.write(' До Нового года осталось ', str)
</SCRIPT> </BODY>
</HTML>
Результат листинга: До Нового года осталось 226 дней. 9 часов, 44 минут
Если методы, названия которых начинаются с get, предназначены для извлечения элементов даты и времени, то методы, начинающиеся с set, служат для поэлементной установки даты и времени или изменения их отдельных элементов. Этот набор методов, предназначенный для внесения изменений в объект Date, отличается от приведенных выше заменой приставки get на set. В работе данных методов есть одна существенная особенность. Если, например, в методе setMonth() устанавливаемое значение больше 11 или меньше 0, то вызов данного метода приведет к изменению текущего года. Номер месяца при этом будет установлен в пределах допустимых значений. Точно так же будет и с любым методом, если устанавливаемое значение выходит за пределы допустимых значений. Эту особенность можно использовать, например, для определения даты, которая через 100 дней, или дня и часа, который будет через 1000 часов (в примерах для удобства будет использоваться функция dateString, описанная в листинге 1). Объект Date имеет целый ряд методов для установки или изменения элементов даты и времени:
· setFullYear (num) — устанавливает полный год для выбранной даты по местному времени;
· setMonth (num) — задает месяц для выбранной даты по местному времени;
· setDate(num) — определяет день месяца для выбранной даты по местному времени;
var today = new Date()
today.setDate(today.getDate() + 100)
document.write('Через 100 дней будет ', dateString(today))
· setHours (num) — устанавливает часы для выбранной даты по местному времени;
|
|
var today = new Date()
today.setHours(today.getHours() + 1000)
var str = today.getHours() +': ' + today.getMinutes() + ', ' +dateString(today)
document.write('Через 1000 часов будет ', str)
· setMinutes (num) — устанавливает минуты для выбранной даты по местному времени;
· set Seconds (num) — устанавливает секунды для выбранной даты по местному времени;
· setMilliseconds (num) — устанавливает миллисекунды для выбранной даты по местному времени;
· setTime (num) — устанавливает дату и время в виде миллисекунд, прошедших от 0:00:00 UTC 1 января 1970 года до заданной даты. В основном используется вместе с методом getTime для внесения относительных изменений в дату.
Все перечисленные выше методы возвращают целые значения и не имеют входных параметров. Все эти методы, за исключением getFullYear и getMilliseconds, появились в версии JavaScript 1.0, а методы getFullYear и getMilliseconds — в версии JavaScript 1.3.