Дата и Время
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Более новая информация по этой теме находится на странице https://learn.javascript.ru/date.
Для работы с датой и временем в JavaScript используются объекты Date.
Создание
Для создания нового объекта типа Date используется один из синтаксисов:
Создаёт объект Date с текущей датой и временем:
Создаёт объект Date , значение которого равно количеству миллисекунд (1/1000 секунды), прошедших с 1 января 1970 года GMT+0.
Если единственный аргумент – строка, используется вызов Date.parse (см. далее) для чтения даты из неё.
new Date(year, month, date, hours, minutes, seconds, ms)
Дату можно создать, используя компоненты в местной временной зоне. Для этого формата обязательны только первые два аргумента. Отсутствующие параметры, начиная с hours считаются равными нулю, а date – единице.
Год year должен быть из 4 цифр.
Отсчёт месяцев month начинается с нуля 0.
Дата задана с точностью до миллисекунд:
Получение компонентов даты
Для доступа к компонентам даты-времени объекта Date используются следующие методы:
getFullYear() Получить год (из 4 цифр) getMonth() Получить месяц, от 0 до 11. getDate() Получить число месяца, от 1 до 31. getHours(), getMinutes(), getSeconds(), getMilliseconds() Получить соответствующие компоненты.
Некоторые браузеры реализуют нестандартный метод getYear() . Где-то он возвращает только две цифры из года, где-то четыре. Так или иначе, этот метод отсутствует в стандарте JavaScript. Не используйте его. Для получения года есть getFullYear() .
Дополнительно можно получить день недели:
getDay() Получить номер дня в неделе. Неделя в JavaScript начинается с воскресенья, так что результат будет числом от 0(воскресенье) до 6(суббота).
Все методы, указанные выше, возвращают результат для местной временной зоны.
Существуют также UTC-варианты этих методов, возвращающие день, месяц, год и т.п. для зоны GMT+0 (UTC): getUTCFullYear() , getUTCMonth() , getUTCDay() . То есть, сразу после "get" вставляется "UTC" .
Если ваше локальное время сдвинуто относительно UTC, то следующий код покажет разные часы:
Кроме описанных выше, существуют два специальных метода без UTC-варианта:
Возвращает число миллисекунд, прошедших с 1 января 1970 года GMT+0, то есть того же вида, который используется в конструкторе new Date(milliseconds) .
Возвращает разницу между местным и UTC-временем, в минутах.
Установка компонентов даты
Следующие методы позволяют устанавливать компоненты даты и времени:
- setFullYear(year [, month, date])
- setMonth(month [, date])
- setDate(date)
- setHours(hour [, min, sec, ms])
- setMinutes(min [, sec, ms])
- setSeconds(sec [, ms])
- setMilliseconds(ms)
- setTime(milliseconds) (устанавливает всю дату по миллисекундам с 01.01.1970 UTC)
Все они, кроме setTime() , обладают также UTC-вариантом, например: setUTCHours() .
Как видно, некоторые методы могут устанавливать несколько компонентов даты одновременно, в частности, setHours . При этом если какая-то компонента не указана, она не меняется. Например:
Автоисправление даты
Автоисправление – очень удобное свойство объектов Date . Оно заключается в том, что можно устанавливать заведомо некорректные компоненты (например 32 января), а объект сам себя поправит.
Неправильные компоненты даты автоматически распределяются по остальным.
Например, нужно увеличить на 2 дня дату «28 февраля 2011». Может быть так, что это будет 2 марта, а может быть и 1 марта, если год високосный. Но нам обо всем этом думать не нужно. Просто прибавляем два дня. Остальное сделает Date :
Также это используют для получения даты, отдалённой от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:
Можно установить и нулевые, и даже отрицательные компоненты. Например:
Преобразование к числу, разность дат
Когда объект Date используется в числовом контексте, он преобразуется в количество миллисекунд:
Важный побочный эффект: даты можно вычитать, результат вычитания объектов Date – их временная разница, в миллисекундах.
Это используют для измерения времени:
Бенчмаркинг
Допустим, у нас есть несколько вариантов решения задачи, каждый описан функцией.
Как узнать, какой быстрее?
Для примера возьмём две функции, которые бегают по массиву:
Чтобы померить, какая из них быстрее, нельзя запустить один раз walkIn , один раз walkLength и замерить разницу. Одноразовый запуск ненадёжен, любая мини-помеха исказит результат.
Для правильного бенчмаркинга функция запускается много раз, чтобы сам тест занял существенное время. Это сведёт влияние помех к минимуму. Сложную функцию можно запускать 100 раз, простую – 1000 раз…
Померяем, какая из функций быстрее:
Теперь представим себе, что во время первого бенчмаркинга bench(walkIn) компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго – перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно.
Гораздо более надёжные результаты можно получить, если весь пакет тестов прогнать много раз.
В современных браузерах (кроме IE9-) вызов performance.now() возвращает количество миллисекунд, прошедшее с начала загрузки страницы. Причём именно с самого начала, до того, как загрузился HTML-файл, если точнее – с момента выгрузки предыдущей страницы из памяти.
Так что это время включает в себя всё, включая начальное обращение к серверу.
Его можно посмотреть в любом месте страницы, даже в <head> , чтобы узнать, сколько времени потребовалось браузеру, чтобы до него добраться, включая загрузку HTML.
Возвращаемое значение измеряется в миллисекундах, но дополнительно имеет точность 3 знака после запятой (до миллионных долей секунды!), поэтому можно использовать его и для более точного бенчмаркинга в том числе.
Для измерения с одновременным выводом результатов в консоли есть методы:
- console.time(метка) – включить внутренний хронометр браузера с меткой.
- console.timeEnd(метка) – выключить внутренний хронометр браузера с меткой и вывести результат.
Параметр "метка" используется для идентификации таймера, чтобы можно было делать много замеров одновременно и даже вкладывать измерения друг в друга.
В коде ниже таймеры walkIn , walkLength – конкретные тесты, а таймер «All Benchmarks» – время «на всё про всё»:
При запуске этого примера нужно открыть консоль, иначе вы ничего не увидите.
Современные интерпретаторы JavaScript делают массу оптимизаций, например:
- Автоматически выносят инвариант, то есть постоянное в цикле значение типа arr.length , за пределы цикла.
- Стараются понять, значения какого типа хранит данная переменная или массив, какую структуру имеет объект и, исходя из этого, оптимизировать внутренние алгоритмы.
- Выполняют простейшие операции, например сложение явно заданных чисел и строк, на этапе компиляции.
- Могут обнаружить, что некий код, например присваивание к неиспользуемой локальной переменной, ни на что не влияет и вообще исключить его из выполнения, хотя делают это редко.
Эти оптимизации могут влиять на результаты тестов, поэтому измерять скорость базовых операций JavaScript («проводить микробенчмаркинг») до того, как вы изучите внутренности JavaScript-интерпретаторов и поймёте, что они реально делают на таком коде, не рекомендуется.
Форматирование и вывод дат
Во всех браузерах, кроме IE10-, поддерживается новый стандарт Ecma 402, который добавляет специальные методы для форматирования дат.
Это делается вызовом date.toLocaleString(локаль, опции) , в котором можно задать много настроек. Он позволяет указать, какие параметры даты нужно вывести, и ряд настроек вывода, после чего интерпретатор сам сформирует строку.
Пример с почти всеми параметрами даты и русским, затем английским (США) форматированием:
Вы сможете подробно узнать о них в статье Intl: интернационализация в JavaScript, которая посвящена этому стандарту.
Методы вывода без локализации:
toString() , toDateString() , toTimeString() Возвращают стандартное строчное представление, не заданное жёстко в стандарте, а зависящее от браузера. Единственное требование к нему – читаемость человеком. Метод toString возвращает дату целиком, toDateString() и toTimeString() – только дату и время соответственно.
toUTCString() То же самое, что toString() , но дата в зоне UTC.
toISOString() Возвращает дату в формате ISO Детали формата будут далее. Поддерживается современными браузерами, не поддерживается IE8-.
Если хочется иметь большую гибкость и кросс-браузерность, то также можно воспользоваться специальной библиотекой, например Moment.JS или написать свою функцию форматирования.
Разбор строки, Date.parse
Все современные браузеры, включая IE9+, понимают даты в упрощённом формате ISO 8601 Extended.
Этот формат выглядит так: YYYY-MM-DDTHH:mm:ss.sssZ , где:
- YYYY-MM-DD – дата в формате год-месяц-день.
- Обычный символ T используется как разделитель.
- HH:mm:ss.sss – время: часы-минуты-секунды-миллисекунды.
- Часть ‘Z’ обозначает временную зону – в формате +-hh:mm , либо символ Z , обозначающий UTC. По стандарту её можно не указывать, тогда UTC, но в Safari с этим ошибка, так что лучше указывать всегда.
Также возможны укороченные варианты, например YYYY-MM-DD или YYYY-MM или даже только YYYY .
Как правильно написать время
Несмотря на кажущуюся простоту описанной в заголовке задачи, далеко не все могут правильно написать время в тексте. У обозначения часов, минут и секунд есть свои нюансы. Перечислим их:
- Сочетания типа « 16:30 », « 19:00 », « 22:04 » пишутся через двоеточие. Часы, минуты и секунды даются не через запятую, точку или дефис, а только через двоеточие.
- Миллисекунды в стандарте «Представление дат и времени. Общие требования» даны через запятую, на практике порой ставят точку или двоеточие.
- Когда речь идет о полуночи, выбор между вариантами «00:00» или «24:00» зависит от того, говорите ли вы о конце дня (24:00) или о начале (00:00). То есть «Наш ресторан работает с 07:00 до 24:00 » или «Наш ресторан работает с 00:00 до 22:00 ». Написание «24:02» уже нельзя признать нормативным — только «00:02», в связи с чем вариант «00:00» побеждает «24:00», даже когда речь идет о конце дня.
- Сочетание « 16:30 » при обозначении времени самодостаточно и не требует при себе слов «минут» или «часов». Корректно также «16 часов 30 минут». Промежуточные варианты « 16:30 минут » или « 16 часов 30 » неправильны.
- Сочетания наподобие « шестнадцать тридцать » пишутся без каких-либо знаков препинания, а вот «ноль-ноль» пишется через дефис («семнадцать ноль-ноль»).
- Сокращения «сек.», «мин.», «ч.», «сут.», «г.», «гг.» согласно правилам орфографии пишутся с точкой.
О том, как правильно написать дату, читайте в нашей следующей статье.
52 thoughts on “ Как правильно написать время ”
А я, указывая время, пишу так: в 17²⁵, около 08ºº, ≈ в 12⁴º и т.д. Вроде, аккуратнее как-то, компактнее…
Да, такая запись красива Но на практике большинство все же пишут без надстрочных знаков – тем, кто предпочитает такую форму, и посвящены наши рекомендации (а точнее – рекомендации различных справочников)
Здравствуйте, скажите пожалуйста как правильно говорить : Приходите К 10:00 или Приходите В 10:00 ?
Оба варианты допустимы, но для более официальных текстов лучше «в»
А всеже:время в таком надстрочный формат- правильный?? или так нельзя писать??
Писать можно, но на практике такая форма редко используется.
В том числе потому что двоеточие поставить проще и быстрее. Например, если писать в том же Word, двоеточие найти намного проще, чем искать, где там расположен верхний индекс :))
Здравствуйте, скажите я проплыл 50 метров за 00:00:45,45 на золото нужно 0,45 сек. Почему мне поставили на сайте 0,46 сек., если не указаны сотые? Ведь без сотых я проплыл 0,45.
Скорее всего, этот вопрос связан с какими-то особенностями программы, подсчитывающей и обрабатывающей результаты, а не с особенностями оформления текста :))
т.к. речь идёт о спортивных мероприятиях, то правила математического округления применяться не могут.
Для получения медали вы должны были завершить заплыв с результатом 00:00:45.00, а завершили за 00:00:45.45, что на 45 сотых секунды больше необходимого, тем самым выйдя за рамки допустимого времени. На сайте 0,46 указано, скорее всего по причине невозможности отображения сотых секунды, а для отображения того, что вы вышли за рамки времени было использование округление в большую сторону.
45,45
в соответствии с математическими правилами третью цифру «4» округлили до «5», так как после нее стоит 5, а вторую «5» на «6», так как перед ней стоит «5». Смешно, но грамотно
Спасибо за вашу работу! У меня такой вопрос: с 7: 20 до 9: 40 пишется с двадцати восьмого до сорока десятого, так правильно? А если пишется с семи двадцать до девяти сорок, так можно?
Заранее спасибо!
Просим прощения за задержку с ответом…
Скорее всего, Вы уже решили этот вопрос, но если нет, то мы бы написали «С семи часов двадцати минут до девяти часов сорока минут». Краткий (но и более разговорный вариант): «С семи двадцати до девяти сорока».
В разговоре редко употребляется вариант «Сорок минут десятого», скорее «Без двадцати десять». Однако «С двадцати минут восьмого до без двадцати десяти» выглядит слишком запутанным на наш взгляд
Как правильно указывать обозначение времени через точку или только двоеточие?
Например:
9:00 или 9.00,
Или время работы:
с 9:00 до 21:00, 9.00 — 21.00
Если речь идет о часах и минутах, то правильный вариант – только двоеточие: 9:00, с 9:00 до 21:00, 9:00–21:00.
Точка возможна между секундами и миллисекундами (хотя согласна стандартам там должна стоять запятая)
Здравствуйте, а писать минуты, например тридцать минут 0, 30 это правильно или ноль категорически лишний? Спасибо.
Честно сказать, не очень поняли Ваш вопрос. Если вы хотите сказать _30 минут_, то указывать ноль перед числом _30_ будет странно – это только собьет с толку
Добрый день! Подскажите, почему в дорожном знаке (в табличке) 8.5.7, время указанно через точку?
С точки зрения правил русского языка, конечно, время должно быть написано через двоеточие. Однако в ПДД принят такой стандарт, и, конечно, вряд ли кто-то будет его переделывать.
Почему он был принят именно таким, мы не можем квалифицированно ответить. Первым просится предположение, что создатели знака, скажем так, просто проигнорировали правила языка. Или решили, что если часы пишутся большим размером шрифта, а минуты – меньшим, то двоеточие будет плохо выглядеть на знаке. Но это лишь предположения
Добрый день.
Я являюсь редактором официального сайта нашего учреждения — детской музыкальной школы. У нас много концертных мероприятий, которые мы должны анонсировать на сайте. И вот с недавних пор наша заведующая учебной частью стала требовать, чтобы время начала концертов я записывала на сайте в следующем формате, например: в 16:00 часов, в 19:00 часов. Или ещё хуже: в 15:30 часов. Меня коробит от этого, но переспорить ее мне не удаётся. Будьте добры, подскажите мне, на какое правило я могла бы сослаться, чтобы убедить начальницу вернуться к нормальному написанию времени.
Заранее спасибо!
Добрый день!
Просим прощения за задержку с ответом.
Если вопрос еще актуален, обратитесь, например, к «Справочнику издателя и автора» Мильчина и Чельцовой. В издании от «ОЛМА-ПРЕСС» (2005 г.) этой теме была посвящена часть 7.3
Добрый день!
Подскажите пожалуйста, если в табеле учета рабочего времени указано «Продолжительность выполнения обязанностей …(указывается в часах)», то как фиксировать время в минутах (например 35 мин., 1 ч. 50 мин. и т.п.)?
Понятнее всего так, как Вы написали: 1 ч. 50 мин. С точки зрения правил русского языка, можно и так – 0:35, 1:50. Но не секрет, что когда дело касается документации, то правила языка, скажем так, часто уходят на задний план
Добрый день. Подскажите, пожалуйста, допустимо ли писать «в период с 9:00-20:00»
или единственно правильно будет «в период с 9:00 до 20:00»? То есть можно ли заменить «до» тире?
Предпочтительнее или тире, или «с… до…». А комбинировать эти два варианта не стоит :))
Например, «Мы открыты с 9:00 до 20:00» или «Часы работы – 9:00–20:00».
Сочетание тире и предлога «с» может быть, если дается некий диапазон и речь идет о точке внутри этого диапазона. Например, «Я начну писать диплом с 15-20 часов (но это не точно)». То есть в какой-то час из указанных, возможно, работа по написанию диплома все же стартует
Спасибо за оперативный ответ!
Добрый день! А что насчёт сочетаний «9 утра» и «09:00 утра»? Какое вернее? И обязателен ли ноль перед указанием часа (09:00 или 9:00)?
Если Вы пишете 09:00, то писать «утра»/«вечера» не надо – это автоматически именно 9 утра. А если надо писать 9 вечера, то будет уже 21:00. XX:XX – это 24-часовой формат.
Что касается нуля, то в более или менее официальных документах предпочтительно с нулем. В иных случаях (например, в письме, статье и т.д.) – можно и без него.
Аналогично как с датой: считается, что если Вы напишете в приказе или протоколе 6.06.2018, то впоследствии дату можно будет поправить – 16, 26. Поэтому в официальных документах ноль ставится
Подскажите, пожалуйста, как пишется слово пару минутный?
Например, пару минутный мастер-класс?
Лучше написать «двухминутный». Или «мастер-класс на пару минут» :))
Для полноты картины можно добавить, что в морской практике и, насколько я знаю, в авиации стандартный формат времени — ЧЧММ, т.е. без двоеточия, например сейчас у меня 1358. Количество цифр числа однозначно указывает на его значение: 4 цифры — это всегда время, 3 цифры — курс (например 090).
Спасибо за Ваше дополнение!
Доброго времени суток. скажите пожалуйста правильно ли будет написать с 18:00 ПО 22:00 . написали потому что в 22:00 начнётся последний розыгрыш
Добрый день!
Когда речь идет о времени, чаще говорят _до 22:00_. Предлог «по» обычно употребляется с датами: с 1 по 5 сентября
Если Вам надо подчеркнуть, что мероприятие (или что-то такое) продолжится и после 22:00, но в 22:00 будет последний розыгрыш, не уверена, что предлог «по» решит Вашу проблему (хотя нужно видеть контекст). Возможно, стоит в принципе изменить фразу
Здравствуйте. У меня на работе в графике прописано рабочий день как 11,3 час ( имеют ввиду как 11часов и 30 мин). Но я не согласен и считаю что правильно писать 11,5 час.
Если есть запятая то это подразумевает какую-то долю от 10. Тогда 11,3 это не 11часов и 30 минут а 11ч и 20мин.
Полностью с Вами согласны 11,3 ч воспринимаются именно как 11 целых 3 десятых часа, но никак не как 11 часов 30 минут.
Всем привет 00:30 правильно как произносить?
Например, «половина первого»
Здравствуйте, правильно говорить «в период с … по …» или «за период с … по …»?
В большинстве случаев правильнее всего было бы обойтись вообще без «периода», поскольку «с… по…» уже говорит, что речь о каком-то временном промежутке
Если же у Вас официальный документ, где канцелярский стиль необходим, то выбирайте тот вариант, который Вам больше нравится – они оба допустимы :))
Как правильно понять запись : «Списание произойдет 23.12.2019 в 00:00 ? Это ночь с 22.12.2019 на 23.12.2019( т.е. начало даты) , или же это ночь с 23.12.2019 на 24.12.2019 (конец даты)? Существует ли строгое правило такого написания?
Извините за задержку с ответом!
Согласно правилам, «23.12.2019 в 00:00» – это ночь с 22-го на 23-е. То есть самое начало 23.12.2019.
Обычно, чтобы избежать разночтений, 00:00 используют для обозначения начала суток, а 24:00 – когда речь идет о конце дня. Но 24:00 используется все реже и реже и может заменяться на 23:59, например.
Доброго времени суток!
Подскажите, пожалуйста, как привильно: «записались В 11:45 или НА 11:45». Речь идёт о времени записи на консультацию педагога или на приём у врача.
Если имеется в виду назначенное время, то «записались на прием в 11:45», или кратко – «записались на 11:45».
Фразу «записались в 11:45» можно понять так, что сегодня в 11:45 я зашла на сайт «Госуслуги» и записалась на послезавтра (как пример).
здравствуйте. правильно ли будет если писать 15 часов дня. или надо писать 15 часов «3 часа» дня
Лучше «15 часов» или «Три часа дня». Для трех часов пояснение день/ночь актуально, так как есть «три часа ночи». Но 15 часов ночи нет, поэтому и уточнять не надо :))
Здравствуйте!
Чтобы указать на определенный промежуток времени (например, при просмотре видео), как правильно называется 45:34 (это минуты и секунды): на 45-ой минуте или это уже 46-ая минута? ?
Это еще 45-я минута
На советских электронных часах (наручных и настенных) время писалось через точку. Например, «16.43».
Да и не было вроде раньше никаких двоеточий. Это отменили? Теперь через двоеточие надо писать?
Извините за задержку ответом… Надеемся, вопрос еще актуален
Не готова комментировать советские часы, но по современным правилам — да, через двоеточие
Здравствуйте! Подскажите, пожалуйста, как правильно писать: составляет 16,6 минут или 16,6 минуты? Снизилось на 6,7 минут или снизилось на 6,7 минуты? Время просмотра составило 78,8 минут или 78,8 минуты?
Извините за задержку ответом… Надеемся, вопрос еще актуален
Полностью фраза читается как «семьдесят восемь [целых] и восемь десятых минуты», поэтому «минуты». Аналогично, когда речь не о минутах, а о чем-либо другом. 78,8 яблока, 13,24 груши и пр.
Работа с датой и временем в JavaScript
В 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 , то браузер берёт ту, которую он имеет по умолчанию.
Текущее время с точностью до миллисекунд
В логирование хочу добавить время записи лога в формате: гггг.мм.дд. // чч.мм.сс//ммм ,
где ммм — миллисекунды. Можно это сделать средствами с++ без ручного пересчета секунд, прошедших с 1900 года? Имеется в виду узнать ВСЮ дату целиком. Миллисекунды, понятно, считаются отдельно.
Решение для винды с «честными» миллисекундами:
![]()
![]()
Для *nix (проверял в Ubuntu) и Windows (проверял в MinGW) в качестве измерителя времени можно использовать POSIX.1-2001 gettimeofday (правда, уже устаревшую к 8-му году, с рекомендацией POSIX.1-2008 использовать clock_gettime (которая отсутствует в доступном мне MinGW)).
Оказывается, кроме отсутствия localtime_r() / gmtime_r() еще и strftime() в винде не понимает %G и %T .