- Работа с датой и временем в JavaScript
- Создание даты – 4 примера
- Получение отдельных компонентов даты и времени
- Установка отдельных компонентов даты и времени
- Преобразование даты в строку и её форматирование
- Как в Excel получить месяц из даты (функция ТЕКСТ и МЕСЯЦ)
- Способ 1. Получить месяц из даты с помощью функции МЕСЯЦ в Excel
- Способ 2. Получить месяц из даты с помощью функции ТЕКСТ в Excel
- Дата и время
- Создание
- Получение компонентов даты
- Установка компонентов даты
- Автоисправление даты
- Преобразование к числу, разность дат
- Date.now()
- Бенчмаркинг
- Разбор строки с датой
Работа с датой и временем в JavaScript
На этом уроке мы познакомимся с объектом Date языка JavaScript и научимся его использовать на практике.
Создание даты – 4 примера
В JavaScript создание даты осуществляется с помощью объекта Date . Объект Date представляет собой точку на оси времени и предназначен для хранения даты и времени с точностью до миллисекунды.
Примеры создания даты в JavaScript.
1. Создание текущей даты и времени.
Получить текущую дату и время в JavaScript осуществляется посредством создания экземпляра объекта Date без указания параметров:
Если нужно получить только сегодняшнюю дату в формате строки, то можно воспользоваться методом toLocaleDateString :
Текущее время пользователя можно получить так:
Дату и время в формате строки можно получить следующим образом:
2. Создание даты путём указания объекту Date количества миллисекунд, прошедших с 1 января 1970 00:00:00 UTC.
3. Создание даты посредством указания её объекту Date в виде строки.
При этом варианте создания даты JavaScript попытается понять переданную ей строку и сформировать на основе её дату. Преобразование строки в дату в JavaScript осуществляется с помощью метода Date.parse .
4. Создание даты посредством указания следующих параметров через запятую: год (4 цифры), месяц (отсчёт ведётся с 0), день (1..31), часы (0..23), минуты (0..59), секунды (0..59), миллисекунды (0..999). Причём обязательными из них являются только первые два параметра.
Пример создания даты с указанием только обязательных параметров:
Примечание: Если Вам необходимо установить дату и время в UTC, то можно воспользоваться методом Date.UTC .
Получение отдельных компонентов даты и времени
В JavaScript для получения отдельных компонентов даты и времени предназначены следующие методы:
- getFullYear() – возвращает год, состоящий из 4 чисел;
- getMonth() – возвращает месяц в формате числа от 0 до 11 (0 – январь, 1 – февраль, 2 – март, . 11 – декабрь);
- getDate() – возвращает число месяца от 1 до 31;
- getHours() – возвращает количество часов от 0 до 23;
- getMinutes() – возвращает количество минут от 0 до 59;
- getSeconds() – возвращает количество секунд от 0 до 59;
- getMilliseconds() – возвращает количество миллисекунд от 0 до 999.
Все эти методы возвращают отдельные компоненты даты и времени в соответствии с часовым поясом установленном на локальном устройстве пользователя.
Пример, в котором поприветствуем пользователя в зависимости от того какой сейчас у него интервал времени:
В этом примере вывод времени в нужном формате осуществлён с использованием тернарного оператора.
В JavaScript имеются аналоги этих методов для получения отдельных компонентов даты и времени для часового пояса UTC+0. Эти методы называются аналогично, но с добавленным «UTC» после «get»: getUTCFullYear() , getUTCMonth() , getUTCDate() , getUTCHours() , getUTCMinutes() , getUTCSeconds() , getMilliseconds() .
Получить номер дня недели в JavaScript можно с помощью метода getDay() .
Данный метод возвращает число от 0 до 6 (0 – воскресенье, 1 – понедельник, . 6 – суббота).
Пример, в котором переведём день недели из числового в строковое представление:
Получить количество миллисекунд прошедших с 01.01.1970 00:00:00 UTC в JavaScript можно с помощью метода getTime() .
Узнать разницу (в минутах) между часовым поясом локального устройства и UTC в JavaScript можно с помощью метода getTimezoneOffset() .
Установка отдельных компонентов даты и времени
В JavaScript установить отдельные компоненты даты и времени можно с помощью следующих методов объекта Date :
- setFullYear(year [, month, date]) – установка года (дополнительно можно задать ещё месяц и число);
- setMonth(month [, date]) – установка месяца от 0 до 11 (0 – январь, 1 – февраль, 2 – март, . 11 – декабрь); дополнительно этот метод позволяет ещё установить число;
- setDate(date) – установка числа;
- setHours(hour [, min, sec, ms]) – устанавливает час от 0 до 23 (дополнительно можно ещё установить минуты, секунды и миллисекунды);
- setMinutes(min [, [sec, ms]) – устаналивает минуты от 0 до 59 (дополнительно можно установить ещё секунды и миллисекунды);
- setSeconds(sec, [ms]) – устанавливает секунды от 0 до 59 (дополнительно можно установить ещё миллисекунды);
- setMilliseconds(ms) – устанавливает миллисекунды (от 0 до 999).
Все эти методы предназначены для установки даты и времени в часовом поясе, установленном на компьютере пользователя.
В JavaScript установка даты и времени в часовом поясе UTC+0 осуществляется с помощью следующих методов: setUTCFullYear() , setUTCMonth() , setUTCDate() , setUTCHours() , setUTCMinutes() , setUTCSecondes() , setUTCMilliseconds() .
Установка даты и времени с помощью количества миллисекунд, прошедших с 01.01.1970 00:00:00 UTC осуществляется с помощью и тогда setTime() .
Кроме этого, в JavaScript указание некорректных компонентов даты и времени не приводит к ошибкам, они просто автоматически распределятся по остальным.
Этот приём можно использовать когда вам нужно получить дату, отличающуюся от данной на определённый промежуток времени.
Преобразование даты в строку и её форматирование
В JavaScript методы, выполняющие преобразование даты в строку, можно разделить на 2 группы.
К первой группе можно отнести методы, которые выполняют это так, как это определено в браузере: toString() , toDateString() , toTimeString() , toUTCString() .
Метод toString() возвращает полное представление даты, toDateString() – только дату, toTimeString() – только время, toUTCString() – полное представление даты, но в часовом поясе UTC+0.
Т.к. строковые представления, которые должны возвращать эти методы чётко не определены в стандарте, то они могут отличаться в разных браузерах.
Ко второй группе можно отнести методы с учётом часового пояса и языка локального компьютера: toLocaleString() – дату и время, toLocaleDateString() – только дату, toLocaleTimeString() – только время.
Методы toLocaleString() , toLocaleDateString() , toLocaleTimeString() имеют 2 необязательных параметра. Первый параметр предназначен для явного указания локали, второй — для задания опций форматирования.
Если локаль явно не установлена или undefined , то браузер берёт ту, которую он имеет по умолчанию.
Источник
Как в Excel получить месяц из даты (функция ТЕКСТ и МЕСЯЦ)
Получить месяц из даты требуется довольно часто. Предположим, что у вас есть выгрузка продаж по дням. Даты указаны вот в таком формате:
Дата и время |
25.08.2013 18:03 |
14.05.2013 18:04 |
07.08.2013 18:02 |
11.09.2013 18:01 |
15.05.2013 10:32 |
Каждая строчка — это отдельная сделка. Вам необходимо сделать отчет за месяц. Какое количество товаров было продано в каждом месяце. Есть разные способы решения данной задачи, но предположим, что у нас стоит задача вытащить из даты месяц, чтобы потом было легко просуммировать по ним данные.
Способ 1. Получить месяц из даты с помощью функции МЕСЯЦ в Excel
Протягиваем формулу и получаем месяц из даты в виде цифры. 5 — это месяц май, 8 — это август и так далее.
Есть аналогичные функции: ГОД, МЕСЯЦ, НЕДЕЛЯ, ДЕНЬ, ЧАС, МИНУТЫ, СЕКУНДЫ, которые работают аналогичным способом. Например, если в нашем примере написать =ГОД(A2), то в результате получим 2013 и так далее
Иногда требуется получить месяц из даты в формате текста: «Январь, Февраль, Март..» в этом случае воспользуемся другой функцией.
Способ 2. Получить месяц из даты с помощью функции ТЕКСТ в Excel
Синтаксис будет следующий
Значение это ссылка на ячейку с датой
Формат — для получения месяцев необходимо использовать заглавную букву «М». Причем от ее количества будет зависеть формат отображения (Первая буква месяца, Полное название месяца, короткое название, в виде двойной цифры и одной цифры)
Наглядно это можно посмотреть на скриншоте.
Так например, чтобы получить месяц в формате «Январь, Февраль, Март», необходимо ввести «ММММ».
Формул будет выглядеть следующим образом.
Источник
Дата и время
Встречайте новый встроенный объект: Date. Он содержит дату и время, а также предоставляет методы управления ими.
Например, его можно использовать для хранения времени создания/изменения, для измерения времени или просто для вывода текущей даты.
Создание
Для создания нового объекта Date нужно вызвать конструктор new Date() с одним из следующих аргументов:
Без аргументов – создать объект Date с текущими датой и временем:
Создать объект Date с временем, равным количеству миллисекунд (тысячная доля секунды), прошедших с 1 января 1970 года UTC+0.
Целое число, представляющее собой количество миллисекунд, прошедших с начала 1970 года, называется таймстамп (англ. timestamp).
Это – легковесное численное представление даты. Из таймстампа всегда можно получить дату с помощью new Date(timestamp) и преобразовать существующий объект Date в таймстамп, используя метод date.getTime() (см. ниже).
Датам до 1 января 1970 будут соответствовать отрицательные таймстампы, например:
Если аргумент всего один, и это строка, то из неё «прочитывается» дата. Алгоритм разбора – такой же, как в Date.parse , который мы рассмотрим позже.
Создать объект Date с заданными компонентами в местном часовом поясе. Обязательны только первые два аргумента.
- year должен состоять из четырёх цифр: значение 2013 корректно, 98 – нет.
- month начинается с 0 (январь) по 11 (декабрь).
- Параметр date здесь представляет собой день месяца. Если параметр не задан, то принимается значение 1 .
- Если параметры hours/minutes/seconds/ms отсутствуют, их значением становится 0 .
Максимальная точность – 1 мс (до 1/1000 секунды):
Получение компонентов даты
Существуют методы получения года, месяца и т.д. из объекта Date :
getFullYear() Получить год (4 цифры) getMonth() Получить месяц, от 0 до 11. getDate() Получить день месяца, от 1 до 31, что несколько противоречит названию метода. getHours(), getMinutes(), getSeconds(), getMilliseconds() Получить, соответственно, часы, минуты, секунды или миллисекунды.
Многие интерпретаторы JavaScript реализуют нестандартный и устаревший метод getYear() , который порой возвращает год в виде двух цифр. Пожалуйста, обходите его стороной. Если нужно значение года, используйте getFullYear() .
Кроме того, можно получить определённый день недели:
getDay() Вернуть день недели от 0 (воскресенье) до 6 (суббота). Несмотря на то, что в ряде стран за первый день недели принят понедельник, в JavaScript начало недели приходится на воскресенье.
Все вышеперечисленные методы возвращают значения в соответствии с местным часовым поясом.
Однако существуют и их UTC-варианты, возвращающие день, месяц, год для временной зоны UTC+0: getUTCFullYear(), getUTCMonth(), getUTCDay(). Для их использования требуется после «get» подставить «UTC» .
Если ваш местный часовой пояс смещён относительно UTC, то следующий код покажет разные часы:
Помимо вышеприведённых методов, существуют два особых метода без UTC-варианта:
Для заданной даты возвращает таймстамп – количество миллисекунд, прошедших с 1 января 1970 года UTC+0.
Возвращает разницу в минутах между UTC и местным часовым поясом:
Установка компонентов даты
Следующие методы позволяют установить компоненты даты и времени:
У всех этих методов, кроме setTime() , есть UTC-вариант, например: setUTCHours() .
Как мы видим, некоторые методы могут устанавливать сразу несколько компонентов даты, например: setHours . Если какая-то компонента не указана, она не меняется.
Автоисправление даты
Автоисправление – это очень полезная особенность объектов Date . Можно устанавливать компоненты даты вне обычного диапазона значений, а объект сам себя исправит.
Неправильные компоненты даты автоматически распределяются по остальным.
Предположим, нам требуется увеличить дату «28 февраля 2016» на два дня. В зависимости от того, високосный это год или нет, результатом будет «2 марта» или «1 марта». Нам об этом думать не нужно. Просто прибавляем два дня. Объект Date позаботится об остальном:
Эту возможность часто используют, чтобы получить дату по прошествии заданного отрезка времени. Например, получим дату «спустя 70 секунд с текущего момента»:
Также можно установить нулевые или даже отрицательные значения. Например:
Преобразование к числу, разность дат
Если объект Date преобразовать в число, то получим таймстамп по аналогии с date.getTime() :
Важный побочный эффект: даты можно вычитать, в результате получаем разность в миллисекундах.
Этот приём можно использовать для измерения времени:
Date.now()
Если нужно просто измерить время, объект Date нам не нужен.
Существует особый метод Date.now() , возвращающий текущую метку времени.
Семантически он эквивалентен new Date().getTime() , однако метод не создаёт промежуточный объект Date . Так что этот способ работает быстрее и не нагружает сборщик мусора.
Данный метод используется из соображений удобства или когда важно быстродействие, например, при разработке игр на JavaScript или других специализированных приложений.
Вероятно, предыдущий пример лучше переписать так:
Бенчмаркинг
Будьте внимательны, если хотите точно протестировать производительность функции, которая зависит от процессора.
Например, сравним две функции, вычисляющие разницу между двумя датами: какая сработает быстрее?
Подобные вычисления, замеряющие производительность, также называют «бенчмарками» (benchmark).
Обе функции делают буквально одно и то же, только одна использует явный метод date.getTime() для получения даты в миллисекундах, а другая полагается на преобразование даты в число. Результат их работы всегда один и тот же.
Но какая функция быстрее?
Для начала можно запустить их много раз подряд и засечь разницу. В нашем случае функции очень простые, так что потребуется хотя бы 100000 повторений.
Вот это да! Метод getTime() работает ощутимо быстрее! Всё потому, что не производится преобразование типов, и интерпретаторам такое намного легче оптимизировать.
Замечательно, это уже что-то. Но до хорошего бенчмарка нам ещё далеко.
Представьте, что при выполнении bench(diffSubtract) процессор параллельно делал что-то ещё, также потребляющее ресурсы. А к началу выполнения bench(diffGetTime) он это уже завершил.
Достаточно реалистичный сценарий в современных многопроцессорных операционных системах.
В итоге у первого бенчмарка окажется меньше ресурсов процессора, чем у второго. Это может исказить результаты.
Для получения наиболее достоверных результатов тестирования производительности весь набор бенчмарков нужно запускать по нескольку раз.
Современные интерпретаторы JavaScript начинают применять продвинутые оптимизации только к «горячему коду», выполняющемуся несколько раз (незачем оптимизировать то, что редко выполняется). Так что в примере выше первые запуски не оптимизированы должным образом. Нелишним будет добавить предварительный запуск для «разогрева»:
Современные интерпретаторы JavaScript выполняют множество оптимизаций. Они могут повлиять на результаты «искусственных тестов» по сравнению с «нормальным использованием», особенно если мы тестируем что-то очень маленькое, например, работу оператора или встроенной функции. Поэтому если хотите серьёзно понять производительность, пожалуйста, изучите, как работают интерпретаторы JavaScript. И тогда вам, вероятно, уже не понадобятся микробенчмарки.
Отличный набор статей о V8 можно найти на http://mrale.ph.
Разбор строки с датой
Метод Date.parse(str) считывает дату из строки.
Формат строки должен быть следующим: YYYY-MM-DDTHH:mm:ss.sssZ , где:
- YYYY-MM-DD – это дата: год-месяц-день.
- Символ «T» используется в качестве разделителя.
- HH:mm:ss.sss – время: часы, минуты, секунды и миллисекунды.
- Необязательная часть ‘Z’ обозначает часовой пояс в формате +-hh:mm . Если указать просто букву Z , то получим UTC+0.
Возможны и более короткие варианты, например, YYYY-MM-DD или YYYY-MM , или даже YYYY .
Источник