Встроенный объект Data применяется для представления и обработки даты и времени. Он не имеет свойств, но обладает несколькими методами, позволяющими устанавливать и изменять дату и время. В языке JavaScript дата определяется числом миллисекунд, прошедших с 1 января 1970 года.
Объект Data создается оператором new с помощью конструктора Data. Если в конструкторе отсутствуют параметры, то значением new Data () будет текущая дата и время. Значением переменной my_data1, определенной следующим образом:
var my_data1 = new Data()
будет объект, соответствующий текущей дате и времени.
Параметром конструктора new Data может быть строка формата "месяц, день, год часы: минуты: секунды". Опишем переменную my_data2 и присвоим ей начальное значение:
var my_data2 = new DataC'Fv, 12, 1978 16:45:10")
Переменная my_data2 определяет дату 12 февраля 1978 года и время 16 часов 45 минут и 10 секунд. Значения часов, минут, секунд можно опустить, в этом случае они будут равны нулю:
var my_data3 = new Data("Feb, 12, 1978")
Параметры конструктора new Data могут определять год, месяц, число, время, минуты, секунды с помощью чисел. Дату 12 февраля 1978 года и время 16 часов 45 минут и 10 секунд можно задать так:
var my_data4 = new Data(78, 1, 12, 16, 45, 10)
Если время опустить, то описание будет следующим:
var my_data5 = new Data(78, 1, 12)
Все числовые представления даты нумеруются с нуля, кроме номера дня в месяце. Месяцы представляются числами от 0 (январь) до 11(декабрь), поэтому второй параметр при задании переменных my_data4 и my_data5 равен 1.
Методами объекта Date можно получать и устанавливать отдельно значения месяца, дня недели, часов, минут и др.
- Метод getDate возвращает число в диапазоне от 1 до 31, представляющее число месяца.
- Метод getHours возвращает час суток. Значение возвращается в 24-часовом формате от 0 (полночь) до 23.
- Метод getMinutes возвращает минуты как целое от 0 до 59.
- Метод getseconds возвращает число секунд как целое от 0 до 59.
- Метод getDay возвращает день недели как целое число от 0 (воскресенье) до 6 (суббота).
- Метод getMonth возвращает номер месяца в году как целое число в интервале между 0 (январь) и 11 (декабрь). Обратите внимание, что номер месяца не соответствует стандартному способу нумерации месяцев.
- Метод getYear выдает год объекта.
В следующем примере эти методы используются для формирования текущего времени.
Пример 1. Определение текущего времени
Напишем сценарий, который определяет текущее время и выводит его в текстовое поле в формате "чч:мм:сс".
В переменной res формируется строка, которая затем будет отображена в поле rest формы с именем form1. Для того чтобы уточнить время, следует еще раз нажать кнопку Время и т. д. Полностью сценарий приведен в листинге 1.
Листинг 1. Определение времени
<HTML>
<HEAD>
<TITLE>Определение времени</TITLE>
<script language="JavaScript">
<!-- //
function c1()
{ var d=document
var t=new Date()
var h=t.getHours()
var m=t.getMinutes()
var s=t.getseconds()
var res=""
if (h < 10)
res += "0" + h
else res += h
if (m < 10) res += ":0"+m
else res += ":"+m
if (s < 10) res += ":0"+s
else res += ":"+s
d.form1.rest.value = res
}
//-->
</script>
</HEAD>
<BODY bgcolor="#FFFFCC">
<CENTER>
<IMG src=alarmWHT.gif><br>
При нажатии кнопки <В>Время</В>, Вы узнаете, который час
<FORM name="form1">
<input type="button" value=Время onClick="c1()">
<input type="text" size=10 narae="rest"><br>
</FORM>
</BODY>
</HTML>
Можно сделать так, что через некоторый заданный период значение времени будет обновляться. Для этого можно использовать функцию setTimeout ("c1()", 3000). Функция setTimeout выполняет указанные в первом параметре действия по истечении интервала времени, задаваемого вторым параметром. В приведенном примере через три секунды будет снова осуществлен вызов функции c1.
Перечисленные ниже методы позволяют устанавливать различные значения для объекта Date.
- Метод setYear устанавливает значение года для объекта Date.
- Метод setDate устанавливает день месяца. Параметр должен быть числом в диапазоне от 1 до 31.
- Метод setMonth устанавливает значение месяца. Параметр должен быть числом в диапазоне от 0 (январь) до 11 (декабрь).
- Метод setHours устанавливает час для текущего времени, использует целое число от 0 (полночь) до 23 для установки даты по 24-часовой шкале.
- Метод setMinuts устанавливает минуты для текущего времени, использует целое число от 0 до 59.
- Метод setSeconds устанавливает секунды для текущего времени, использует целое число от 0 до 59.
- Метод setTime устанавливает значение объекта Date и возвращает количество миллисекунд, прошедших с 1 января 1970 года.
Пример 2. Пятница 13
Напишем сценарий, с помощью которого определяются все даты в указанном году, приходящиеся на пятницу, 13 число.
При написании сценария будем поступать следующим образом: перебирать с помощью цикла месяцы и в каждом месяце устанавливать номер дня 13. Установка требуемой даты выполняется использованием методов работы с датой:
t.setYear (у)
t.setMonth (i)
t.setDate (13)
Далее следует проверить, какой номер дня соответствует этой дате. Если номер равен пяти ((t. getoay ()) ==5), то день недели - пятница, найденный месяц следует запомнить. Для формирования ответа используется строковая переменная с, после запоминания названия месяца добавляется символ перевода строки. HTML-код со сценарием приведен в листинге 2.
Листинг 2. В какие месяцы года 13 число попадает на пятницу?
<HTML>
<HEAD>
<TITLE>B какие месяцы года 13 число попадает на пятницу?</TITLE>
<script language="JavaScript">
<!-- //
function def13(obj)
{ var t= new Date()
var c=""
var y=Number(obj.fye.value)
for (var 1=0; i <=11; i++)
{ t.setYear(y)
t.setMonth(i)
t.setDate(13)
if ((t.getDay())==5)
с = c+ fmon(i)+ "\r\n"
}
obj.res.value = с
}
function fmon(mont)
{
var s
switch (mont)
{ case 0 s="январь"; break;
case 1 s="февраль"; break;
case 2 s="март"; break;
case 3 s="апрель"; break;
case 4 s="май"; break;
case 5 s="июнь"; break;
case 6 s="июль"; break;
case 7 s="август"; break;
case 8 s="сентябрь"; break;
case 9 s="октябрь"; break;
case 10: s="ноябрь"; break;
case 11: s="декабрь"; break;
}
return s
}
//-->
</script>
</HEAD>
<BODY bgcolor="#FFFFCC">
<H4>B какие месяцы заданного года число 13 попадает на пятницу?</h4>
<FORM name="form1">
Введите год: <input type="text" size=8 name="fye" >
<input type="button" value=Haйти onClick="def13 (form1)"><br>
<textarea Cols=30 rows=4 name=res></textarea><br>
<input type="reset" value=Отменить>
</FORM>
</BODY>
</HTML>
Задания
1. Проверьте примеры из лабораторной работы.
2. Напишите сценарий, который по заданной дате определяет номер недели в году.
3. Напишите сценарий, который по дате рождения человека определяет, под каким знаком зодиака родился человек.
4. В старояпонском календаре был принят 60-летний цикл, состоящий из пяти 12-летних подциклов. Подциклы обозначались названиями цвета: зеленый, красный, желтый, белый, черный. Внутри каждого подцикла годы носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. Например, 1984 год (год зеленой крысы) был началом очередного цикла. Напишите сценарий, который по заданной дате определяет название года по старояпонскому календарю.