Выбор читателей
Популярные статьи
Объект Date позволяет работать с датами и временем. Для создания нового объекта Date используется следующий синтаксис:
New Date()
Даты хранятся в нём как количество миллисекунд, прошедших с полуночи 1 января 1970 г. согласно единому всемирному времени (UTC). Благодаря такому формату с помощью Date можно точно представлять даты, отстоящие от 1 января 1970 г. на 285616 лет.
Если конструктор Date вызывается без аргументов, создаётся объект с текущими значениями даты и времени. Для создания объекта Date с определенной датой или временем, необходимо будет передать один из четырех возможных параметров:
Обратите внимание, что число 4 соответствует маю месяцу. Это значит, что январю соответствует число 0. Аналогичным образом вычисляются и дни, только нулю в этом случае соответствует воскресенье.
При работе с объектом Date важно помнить, что вычисления выполняются с использованием единого всемирного времени (UTC), несмотря на то, что ваш компьютер может отображать время в соответствии с вашей временной зоной.
МетодыgetDate() | Возвращает день месяца (от 1 до 31) для указанной даты по местному времени. |
getDay() | Возвращает день недели (от 0 до 6; 0 = воскресенье, 1 = понедельник и т.д.) для указанной даты по местному времени.. |
getFullYear() | Возвращает год (четыре цифры). |
getHours() | Возвращает час (от 0 до 23). |
getMilliseconds() | Возвращает миллисекунды (от 0 до 999). |
getMinutes() | Возвращает минуты (от 0 до 59). |
getMonth() | Возвращает месяц (от 0 до 11; 0 = январь, 1 = февраль и т.д.). |
getSeconds() | Возвращает секунды (от 0 до 59). |
getTime() | Возвращает количество миллисекунд, прошедших с полуночи 01.01.1970. |
getTimezoneOffset() | Возвращает разницу во времени между временем UTC и местным временем, в минутах. |
getUTCDate() | Возвращает день месяца по всемирному времени (от 1 до 31). |
getUTCDay() | Возвращает день недели по всемирному времени (от 0 до 6). |
getUTCFullYear() | Возвращает год по всемирному времени (четыре цифры). |
getUTCHours() | Возвращает час по всемирному времени (от 0 до 23). |
getUTCMilliseconds() | Возвращает миллисекунды по всемирному времени (от 0 до 999). |
getUTCMinutes() | Возвращает минуты по всемирному времени (от 0 до 59). |
getUTCMonth() | Возвращает месяц по всемирному времени (от 0 до 11). |
getUTCSeconds() | Возвращает секунды по всемирному времени (от 0 до 59). |
parse() | Анализирует строку даты (например, "21 мая 1992 года") и возвращает строку со значением даты, которая содержит число в миллисекундах с 1 января 1970 00:00:00. |
setDate() | Устанавливает день месяца для указанной даты по местному времени (от 1 до 31). |
setFullYear() | Устанавливает год (четыре цифры). |
setHours() | Устанавливает часы для указанной даты по местному времени (от 0 до 23). |
setMilliseconds() | Устанавливает миллисекунды для указанной даты по местному времени. |
setMinutes() | Устанавливает минуты (от 0 до 59). |
setMonth() | Устанавливает месяц (от 0 до 11). |
setSeconds() | Устанавливает секунды (от 0 до 59). |
setTime() | Устанавливает дату в миллисекундах после (или до) 01.01.1970. |
setUTCDate() | Задает день месяца. |
setUTCFullYear() | Устанавливает год по всемирному времени (четыре цифры). |
setUTCHours() | Устанавливает час для указанной даты по всемирному времени. |
setUTCMilliseconds() | Задает миллисекунды для указанной даты по всемирному времени. |
setUTCMinutes() | Устанавливает минуты для указанной даты по всемирному времени. |
setUTCMonth() | Задает месяц для указанной даты по всемирному времени. |
setUTCSeconds() | Устанавливает секунды для указанной даты по всемирному времени. |
toDateString() | |
toISOString() | Преобразует дату в строку, используя стандарт ISO 8601. |
toJSON() | Возвращает дату в виде строки, отформатированную как дата JSON. |
toLocaleDateString() | |
toLocaleTimeString() | Возвращает часть даты в виде строки, с представлением даты на основе параметров системы. |
toLocaleString() | Возвращает дату в виде строки, с представлением даты на основе параметров системы. |
toString() | Возвращает строку, представляющую указанный объект Date. |
toTimeString() | Возвращает часть даты в виде строки. |
toUTCString() | Преобразует дату в строку, используя часовой пояс UTC. |
UTC() | Принимает те же параметры, что и длинная форма конструктора (т.е. 2-7) и возвращает количество миллисекунд с 1 января 1970, 00:00:00 UTC. |
valueOf() | Возвращает примитивное значение объекта Date. |
Всем привет!
Мне часто приходится работать со статистическими данными и там очень много завязано на датах. Притом, одна и та же дата может быть использована на странице в разных форматах (например, в удобном для машины и в удобном для человека). Я думаю, что большинство из вас отлично представляют весь этот ужасающий по размерам код, который получается при использовании объекта Date.
К примеру, чтобы получить текущую дату в формате ДД.ММ.ГГГГ нам потребуется сделать следующее:
var d = new Date(),
fd = d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear();
А когда таких строк становится много? Легко ли упомнить, что в javascript месяц начинается с нуля, когда разрабатываешь не только на нем? Или то, что тут миллисекунды, а не секунды, как почти везде на бэкенде? Можно решить часть задач популярной библиотекой Moment.js , но она работает весьма медленно.
Рассматриваемая библиотека решает эти проблемы.
Если интересно, предлагаю вам прочитать этот небольшой обзор.
TempusJS во многом состоит из синтаксического сахара над объектом Date, поэтому работает очень быстро. Синтаксис же самой библиотеки весьма прост. Например, записать предыдущий пример, можно так:
var fd = tempus().format("%d.%m.%Y");
Теперь о скорости. В спойлере вы можете увидеть сравнение Tempus с Moment и нативным способом форматирования даты (см. выше):
Сравнение нативного JS, MomentJS и TempusJS
Получаем текущую дату Native JS x 2,175,575 ops/sec ±0.75% (96 runs sampled) Moment x 284,864 ops/sec ±0.85% (96 runs sampled) Tempus x 2,086,081 ops/sec ±0.73% (97 runs sampled) Форматирование Native JS x 1,637,517 ops/sec ±0.61% (100 runs sampled) Moment x 8,808 ops/sec ±1.07% (100 runs sampled) Tempus x 942,815 ops/sec ±0.68% (94 runs sampled) Автоопределение даты и парсинг Native JS x 11,204,316 ops/sec ±0.81% (88 runs sampled) Moment x 38,511 ops/sec ±1.41% (95 runs sampled) Tempus x 93,973 ops/sec ±1.06% (85 runs sampled) Парсинг даты по формату Moment x 46,293 ops/sec ±0.63% (100 runs sampled) Tempus x 109,947 ops/sec ±0.93% (99 runs sampled) Парсинг и валидация Moment x 44,588 ops/sec ±1.09% (90 runs sampled) Tempus x 103,439 ops/sec ±0.90% (94 runs sampled)Итак, в преимущества данной библиотеки можно записать следующее:
Здесь речь пойдет только о некоторых функциях.
Форматирование и парсингИтак, для начала еще один пример форматирования даты. Здесь мы также используем цепочку вызовов. В конце каждой установки значения, мы получаем обратно объект TempusDate, который можем использовать дальше в цепочке. Пример:
tempus(). // получаем новую дату
calc({month: -1}). // уменьшаем ее на один месяц
format("%d.%m.%Y"); // Выводим в виде строки
Таким образом, мы получим этот же день, час и секунду, но месяц назад. Это бывает полезно для получения отчетов за последний месяц.
Следующий пример - парсинг даты.
// Вернет объект TempusDateс датой "2013-11-18"
tempus("18.11.2013");
// Вернет объект TempusDateс датой "2013-12-12"
tempus("2013-12-12", "%Y-%m-%d"));
Tempus может автоматически определять некоторые известные форматы. Также, можно указывать определенный формат, тогда парсинг будет происходить быстрее. Плюс к этому, можно задавать дату, которая будет возвращена, если парсинг завершится неудачей:
// Т.к. "123" не подходит к формату "%d.%m.%Y", то
// будет возвращен объект, содержащий дату 2013-01-01
tempus("123", "%d.%m.%Y", tempus());
Список форматов по умолчанию можно посмотреть
А теперь поменяем формат уже отформатированной даты
// "2013-11-05"
tempus("05.11.2013").format("%Y-%m-%d");
// Или так
// "October, 12"
tempus("2013-10-12 12:31:01", "%Y-%m-%d %H:%M:%S").format("%B, %d");
Также, можно использовать локализацию для форматирования. По умолчанию, будет выбран язык пользователя (берем из браузера) или язык по умолчанию, если язык пользователя не обнаружен среди доступных языков Tempus.
// Устанавливаем язык
tempus.lang("ru");
// Стандартно используем format
// "Ноябрь, 05"
tempus(1383609600).format("%B, %d");
На данный момент языков всего два - русский и английский, так что буду рад помощи.
В случае ошибки, можно посмотреть поля, в которых она возникла - везде, где значение не false:
// Вернет {"year":-5,"month":false,"day":false,"hours":false,
// "minutes":false,"seconds":false,"milliseconds":false}
tempus().
year(-5). // задаем год=-5, т.е. невалидный
errors(); // получаем объект с ошибками
Также, мы можем изменить какую-либо дату, используя функцию calc:
// Вернет TempusDate с датой 2012-01-01
tempus().calc({year: 1, month: -4, day: -1});
Для работы с датой и временем в 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 и т.д.
Рассмотрим пример работы с датами:
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 = tmp.toLocaleString(); arrNormal = tmp.toString(); arrUTC = tmp.toUTCString(); // завтра tmp.setDate(tmp.getDate() + 1); arrLocal = tmp.toLocaleString(); arrNormal = tmp.toString(); arrUTC = tmp.toUTCString(); // через 1 год 6 месяцев 15 дней tmp.setFullYear(tmp.getFullYear() + 1); tmp.setMonth(tmp.getMonth() + 6); tmp.setDate(tmp.getDate() + 15); arrLocal = tmp.toLocaleString(); arrNormal = tmp.toString(); arrUTC = tmp.toUTCString(); // выводим результаты в таблицу document.write("
Дата | " + "Локализованная | " + "Не локализованная | " + "UTC |
" + arrNames[i] + " | + "" + arrLocal[i] + " | + "" + arrNormal[i] + " | + "" + arrUTC[i] + " | + "
А вот результат работы этого скрипта:
Как видите, представление даты существенно отличается в зависимости от используемого формата. Поэтому при работе с датой-временем надо придерживаться нескольких простых правил:
1. По возможности пользоваться UTC или GMT-форматами. Особенно это важно при создани распределённых решений (например, клиентов платёжных систем). Использование общего опорного времени даст вам гарантии (пусть и не стопроцентные), что и вы и ваш удалённый партнёр будете одинаково интерпретировать получаемые данные.
2. Локализованные дату и время имеет смысл использовать только при выводе их пользователю. Во всех остальных случаях от локализованных данных лучше отказаться.
3. Если всё же приходится использовать локальные дату и время - не забывайте учитывать смещение локального времени относительно опорного (UTC или GMT).
Следование этим правилам избавит вас от большинства логических багов и недочётов, а значит сделает ваш код более стабильным и качественным.
Доброго времени суток всем подписчикам и читателям блога сайт. В этой статье мы изучим встроенный объект языка программирования jscript – Date.
Объект JS Date предназначен для работы с датой и временем и для преобразования строк в формат даты. При создании класса Date, jscript использует ключевое слово new и один из трёх видов конструкторов, давайте посмотрим на их общий синтаксис:
Класс JS DATE – дата и времяDate () – в данном случае будет произведен вывод текущей даты и времени js в формате: , время задается по Гринвичу, т. е. с использованием UTC (UCT - Universal Coordinated Time).
Date (nMilliseconds) – Как видим, тут мы передаем один параметр nMilliseconds, который задает дату1 в миллисекундах, считая от 1 января 1970 года
Date (year, month, date [, hours [, min [, sec [, ms]]]]) – Тут мы видим, что конструктору передаются несколько параметров, что позволяет задать вручную все значения даты и времени js:
Хорошо, давайте посмотрим на следующий пример использования класса JS DATE в сценарии на языке программирования , который работает под управлением сервера :
// Объект JS Date // 1_date.js //********************************** var a, b, c //Текущая дата1 и время1 a = new Date () ; //js //Период через 1000 мс после 1 января 1970 года b = new Date (1000 ) ; //Собственная временная дата2 c = new Date (2000 , 5 , 20 , 12 , 20 , 55 , 97 ) ; WScript.Echo (a + "\n " + b + "\n " + c) ; |
Хорошо, теперь давайте рассмотри основные методы класса Date JS языка.
getFullYear () – Номер текущего года в четырехзначном формате.
getDate () – Вернёт номер текущей даты (от 1 до 31).
getMonth () – Номер текущего месяца (от 1 до 12).
getDay () - Номер дня недели (0 для воскресения, 1- для понедельника. и т. д.).
getHours () – Количество часов (отсчет начинается с полуночи).
getMinutes () - Вернёт количество минут (отсчет начинается с начала часа).
getSeconds () - Число секунд (отсчет идет с начала минуты).
getMilliseconds () - Число миллисекунд.
Давайте рассмотрим следующий пример сценария, который демонстрирует работу с вышеописанными методами класса Date:
//********************************** // Объект JS Date // 2_date.js //********************************** var js_new_date = new Date ; //js var gFullYear, gDate, gMonth, gDay, gHours, gMinutes, gSeconds, gMilliseconds, MyArr, index, list= "" ; gFullYear = "Год\t \t " + js_new_date.getFullYear () ; gDate = "Дата\t \t " + js_new_date.getDate () ; gMonth = "Месяц\t \t " + js_new_date.getMonth () ; gDay = "День недели\t \t " + js_new_date.getDay () ; gHours = "Часы\t \t " + js_new_date.getHours () ; gMinutes = "Минуты\t \t " + js_new_date.getMinutes () ; gSeconds = "Секунды\t \t " + js_new_date.getSeconds () ; gMilliseconds = "Миллисекунды\t \t " + js_new_date.getMilliseconds () ; //Сохраняем всё в массиве MyArr = [ gFullYear, gDate, gMonth, gDay, gHours, gMinutes, gSeconds, gMilliseconds] for (var index in my_arr) { list+= MyArr[ index] + "\n " |
Видим, что тут мы объявили ряд переменных jscript, которые хранят значения, возвращаемые функциями класса Date() JS языка, далее, все переменные мы прописали в массив MyArr (детальное описание массивов есть в статье " "), доступ к нему осуществляется через цикл for in (данный цикл я описал в статье " "). В самом конце мы выводим список значений для всех переменных.
getTime () – Количество миллисекунд, которые прошли с 1 января 1970 года. Он идеально подходит для вычисления времени работы блока кода.
//**********************************
// js date
// Метод getTime()
// 3_date.js
//**********************************
var
to_time,
end_time,
time_elapsed,
summ=
0
;
//Начало
to_time =
(new
Date
()
)
.getTime
()
;
for
(var
i=
0
;
i
По-моему, проще некуда, достаточно красиво и понятно. Если у вас нет никакого желания изучать построение этого скрипта, то просто вставляйте его в любое место HTML-страницы и получите следующую надпись: Еще один вариант более расширенный // Выглядит он так: Сегодня Вобщем не требуется никаких навыков, просто тупо вставляем код и все ок! Подробнее:Итак, начинаем с присвоения значения даты переменной d , затем создаём массивы (Array ) для дней недели (day ) и месяцев (month ), указывая их в необходимой грамматической форме: падеж, число, заглавная буква, если слово стоит в начале даты и т.п. Последняя строчка скрипта - собственно печать даты (document.write ). Здесь вы устанавливаете, что и в какой последовательности будете выводить в строке текущей даты. Компоненты отделяются друг от друга знаком + . Для ввода пробела используется конструкция " " , а для ввода буквы г (год) - конструкция " г." Как видно из скрипта, получение данных о текущем времени выполняет элемент get . Этот метод позволяет получить следующую информацию:
Вставлять непосредственно Java -скрипт внутрь страницы сайта не всегда удобно. Лучше поместить описание скрипта в начало страницы между тегами и задать переменную, которую будем вызывать по мере необходимости в тексте. Назовём её TODAY и определим в ней форму вывода даты аналогично вышеизложенному. Скрипт будет выглядеть следующим образом: Для вывода даты вызываем скрипт в нужном месте HTML-кода страницы, используя следующую команду: Если ваш сайт содержит много страниц, на которых надо показывать дату, то удобнее выделить Java -скрипт вывода даты в отдельный файл, например, data.js . Практически, это страница, состоящая из первого из описанных скриптов, то есть со строкой document.write (см. выше). Располагать её надо в том же каталоге, что и основная страница, и вызывать в месте вывода даты следующим образом: Не забудьте проверить, чтобы файл data.js имел ту же кодировку, что и основной документ, иначе дата будет выводиться замечательными крючками, квадратиками и прочими финтифлюшками. Замечание. Следует иметь ввиду, что описанный скрипт выводит дату, установленную на компьютере пользователя, что не всегда соответствует реальному текущему времени. Если вам необходимо показать точное время, то необходимо использовать РНР-скрипт, который будет показывать время на сервере.
gastroguru © 2017
|