UTC дату из 13 цифр в обычный человеческий формат — efim360.ru
У нас есть число из 13 цифр.
let number13 = 1646944886676;
Это число является кодом UTC, который символизирует некую временную дату. Аббревиатура UTC расшифровывается как Coordinated Universal Time (Всемирное Координированное Время).
Мы хотим получить какую-то внятную строку, по которой можно понять год, месяц, день, час и минуту, которые символизирует эта UTC-дата. Как это сделать?
Решение
Для решения задачи нужно учитывать разный результат в работе конструктора Date().
Его можно вызвать в двух вариациях:
// Вызов БЕЗ оператора new Date(1646944886676) // Вызов С оператором new new Date(1646944886676)
Разница в вызовах существенная.
Вызвали конструктор Date() с и без оператора new — JavaScriptБЕЗ new мы получаем просто ТЕКУЩУЮ дату формата ‘Sun Mar 13 2022 13:32:50 GMT+0300 (Москва, стандартное время)’ в виде обычной строки JavaScript. Передаваемое в конструктор число было тупо проигнорировано.
С new мы получаем нужный нам ИСТОРИЧЕСКИЙ МОМЕНТ во времени, но не в виде строки, а в виде объекта, из которого можно доставать всё что нам нужно.
Что делать с объектом даты?
Теперь мы можем превратить полученный с new объект даты в нужную нам строку. Например:
// По стандарту ECMAScript new Date(1646944886676).toDateString() 'Thu Mar 10 2022' new Date(1646944886676).toISOString() '2022-03-10T20:41:26.676Z' new Date(1646944886676).toJSON() '2022-03-10T20:41:26.676Z' new Date(1646944886676).toLocaleDateString() '10.03.2022' new Date(1646944886676).toLocaleString() '10.03.2022, 23:41:26' new Date(1646944886676).toLocaleTimeString() '23:41:26' new Date(1646944886676).toString() 'Thu Mar 10 2022 23:41:26 GMT+0300 (Москва, стандартное время)' new Date(1646944886676).toTimeString() '23:41:26 GMT+0300 (Москва, стандартное время)' new Date(1646944886676).toUTCString() 'Thu, 10 Mar 2022 20:41:26 GMT' new Date(1646944886676).valueOf() 1646944886676
// Из сторонних API new Date(1646944886676).toGMTString() 'Thu, 10 Mar 2022 20:41:26 GMT'
Вытаскиваем ГОД из 13 цифр UTC-даты
new Date(1646944886676).getFullYear() 2022
Вытаскиваем МЕСЯЦ из 13 цифр UTC-даты
Но тут есть прикол с индексацией месяцев. Индексация начинается как в массивах с НУЛЯ.
Логика сопоставления порядкового номера месяца у метода getMonth в Date — JavaScriptnew Date(1646944886676).getMonth() 2
Вытаскиваем ДЕНЬ из 13 цифр UTC-даты
new Date(1646944886676).getDate() 10
Получаем десятое число месяца.
Информационные ссылки
Стандарт ECMAScript — Раздел «21. 4 Date Objects» — https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date-objects
Команда date | Linux FAQ
Команда date позволяет задействовать одноименную утилиту, которая используется для двух целей. Обычно она используется для получения текущих даты и времени при необходимости в заданном формате, но при этом она также позволяет устанавливать их.
Стандартный синтаксис команды выглядит следующим образом:
$ date [описание времени или формата вывода]
Формат ввода даты и времени
Для начала рассмотрим вопрос установки текущих даты и времени, так как данное действие выполняется достаточно просто (единственная сложность связана с запоминанием формата даты и времени). Вы можете самостоятельно выполнить команду
# date MMDDhhmm[[CC]YY][. ss]
Но все не так сложно, как кажется на первый взгляд. Параметры в квадратных скобках являются необязательными — вы можете как использовать их, так и отказаться от их использования. Каждая пара букв соответствует элементу записи даты или времени:
Элемент записи | Назначение |
MM | Месяц (от 01 до 12) |
DD | День (от 01 до 28, 29, 30 или 31 в зависимости от месяца) |
hh | Часы (от 00 до 24) |
mm | Минуты (от 00 до 59) |
YY | Две последние цифры года (от 00 до 99, не обязательно) |
CC | Век (от 00 до 99, используется вместе с предыдущим элементом, не обязательно) |
.ss | Секунды (от 00 до 59 с символом точки, не обязательно) |
Как утилита вычисляет век? В UNIX-подобных операционных системах время хранится в формате числа секунд, прошедших с 1 января 1970 года в часовом поясе GMT (также известном, как UTC).
Для установки текущих даты и времени необходимы права пользователя root, иначе вы получите аналогичное сообщение об ошибке:
date: невозможно установить дату: Операция не позволена
Формат вывода даты и времени
Команда date без параметров хороша в том случае, если вам нужно узнать текущие дату в время. Но функция вывода даты и времени в произвольном формате полезна при разработке сценариев командной оболочки. Иногда нужно использовать максимально краткую запись даты; иногда в сценарии нужно обрабатывать лишь время без даты; иногда дату и время приходится сравнивать с датой и временем из внешнего источника и это сравнение будет гораздо более простым в случае получения текущих даты и времени в том же формате, в котором передаются данные из внешнего источника.
Для форматирования текущих даты и времени в соответствии со своими предпочтениями пользователь должен передать утилите строку форматирования после символа +:
$ date +"<строка форматирования>"
Строка форматирования состоит из параметров форматирования, приведенных в таблице ниже.
Параметр форматирования | Назначение | Пример вывода |
%a | Сокращенное название дня недели | Чт |
%A | Полное название дня недели | Четверг |
%b | Сокращенное название месяца | июн |
%B | Полное название месяца | Июнь |
%d | Номер дня недели | 08 |
%D | 06/08/17 | |
%F | Текущая дата в формате ГГГГ/ММ/ДД | 2017-06-08 |
%H | Часы в 24-часовом формате в диапазоне от 00 до 23 | 18 |
%l | Часы в 12-часовом формате в диапазоне от 01 до 12 | 6 |
%j | Номер дня года в диапазоне от 001 до 366 | 159 |
%m | Номер месяца в диапазоне от 01 до 12 | 06 |
%M | Минуты в диапазоне от 00 до 59 | 24 |
%S | Секунды в диапазоне от 00 до 60 | 22 |
%N | Наносекунды в диапазоне от 000000000 до 999999999 | 335288238 |
%T | Время в формате ЧЧ:ММ:СС в 24-часовом формате | 18:24:22 |
%u | Номер дня недели в диапазоне от 1 до 7 | 4 |
%U | Номер недели в году в диапазоне от 00 до 53 | 23 |
%Y | Полный номер года | 2017 |
%Z | Обозначение часового пояса | MSK |
Примеры использования
Получение текущих даты и времени
Для получения текущих даты и времени в стандартном формате достаточно выполнить следующую команду:
$ date
Утилита выведет аналогичную информацию:
Чт июн 8 15:12:21 MSK 2017
Для вывода даты и/или времени в пользовательском формате достаточно добавить символ + и строку форматирования. Например, для вывода даты и времени может использоваться команда:
$ date +"%H:%M %d/%m/%Y"
В результате будет выведена следующая информация:
19:33 08/06/2017
Добавление текущей даты в имена создаваемых файлов
Отличным примером использования команды date в сценариях является создание суффикса имени файла для автоматизированного создания нескольких файлов с аналогичными именами. Например, процесс создания создании резервных копий данных. Файл резервной копии данных создается с помощью утилиты tar и сохраняется на жестком диске большого, но не бесконечного объема. Локальная машина носит имя bugler, поэтому данное слово присутствует и в имени файла резервной копии. Файловая система с жесткого диска большого объема скопирована в директорию /bkup. Команда для создания резервных копий будет выглядеть следующим образом:
$ tar -zcf /bkup/bugler.backup.$(date +%a). tgz /
Она создает сжатый (благодаря параметру -z) файл архива всей файловой системы (благодаря символу / в конце команды) и сохраняет этот файл под именем /bkup/bugler.backup.Sat.tgz. В результате использования команды date при формировании имени файла, файл архива будет перезаписываться ровно через неделю, что позволит сэкономить дисковое пространство — оно будет просто повторно использоваться.
Примечание: конструкция $(<команда>) позволяет использовать вывод дополнительной команды в качестве части основной команды. Альтернативным решением является использование обратных кавычек: …backup `date +%a`.tgz. При этом формат $(<команда>) гораздо проще в использовании.
Установка текущих даты и времени
В том случае, если вы не будете вводить необязательные элементы записи даты и времени, утилита будет считать, что вы выбрали текущий год. Таким образом, в случае исполнения следующей команды:
# date 06081540
системные часы будут переведены на 5 июня 2017 года (да, эта статья писалась именно в этот день). Теперь предположим, что нам нужно установить 2018 год. В этом случае команда примет следующий вид:
# date 0608154018
Использование утилиты на удаленных системах
Для сравнения дат на локальном и удаленном компьютере достаточно настроить вход в удаленную систему без пароля и выполнить команду:
$ ssh [email protected]<целевая система> date & date
Для установки локального времени на удаленном компьютере может использоваться следующая команда:
$ ssh [email protected]<целевая система> "date $(date +%m%d%H%M.%S)"
Функции даты и времени JavaScript
JavaScript предоставляет следующие функции даты и времени. Обратите внимание, что UTC означает универсальное скоординированное время
Функция | Описание | Возвращаемые значения |
---|---|---|
getdate() getUTCDate() | День месяца | 1-31 |
getday() getUTCDay() | День недели (целое число) | 0-6 |
getFullYear() getUTCFullYear() | Год (полные четыре цифры) | 1900+ |
getHours() getUTCHours() | Час дня (целое число) | 0-23 |
getMilliseconds() getUTCMilliseconds() | Миллисекунды (с последней секунды) | 0-999 |
getMinutes() getUTCMinutes() | Минуты (с последнего часа) | 0-59 |
получить месяц() получитьUTCMonth() | Месяц | 0-11 |
getSeconds() getUTCSeconds() | Секунды (с последней минуты) | 0-59 |
получить время() | Количество миллисекунд с 1 января 1970 г. | |
получить смещение часового пояса () | Разница между местным временем и временем по Гринвичу в минутах | Разница в минутах между UTC и местным временем. Значение положительное, если местный часовой пояс отстает от UTC, и отрицательное, если опережает. Например, часовой пояс UTC+10 (восточное стандартное время Австралии) вернет -600. |
получитьгод() | год | 0-99 для годов между 1900-1999 Четыре цифры для 2000+ |
разбор() | Возвращает количество миллисекунд, прошедших с полуночи 1 января 19 года.70 для заданной строки даты и времени, переданной ему. | |
setdate() setUTCDate() | Устанавливает день, учитывая число от 1 до 31 | Дата в миллисекундах |
setFullYear() setUTCFullYear() | Устанавливает год, учитывая четырехзначное число | .Дата в миллисекундах |
setHours() setUTCHours() | Устанавливает час, учитывая число от 0 до 23 | Дата в миллисекундах |
setMilliseconds() setUTCMilliseconds() | Устанавливает миллисекунды, учитывая число | Дата в миллисекундах |
setMinutes() setUTCMinutes() | Устанавливает минуты, заданные числом от 0 до 59 | Дата в миллисекундах |
setMonth() setUTCMonth() | Устанавливает месяц, учитывая число от 0 до 11 | Дата в миллисекундах |
setSeconds() setUTCSeconds() | Устанавливает секунды, заданные числом от 0 до 59 | Дата в миллисекундах |
установить время() | Устанавливает дату, учитывая количество миллисекунд с 1 января 1970 года | Дата в миллисекундах |
setYear() | Устанавливает год, учитывая двузначное или четырехзначное число | .Дата в миллисекундах |
toGMTString() toUTCString() | Дата и время по Гринвичу в виде строки | день дд ммм гггг чч:мм:сс GMT |
toLocaleString() | Локальная дата и время в виде строки | Зависит от операционной системы, языка и браузера |
toString() | Локальная дата и время в виде строки | Зависит от операционной системы, языка и браузера |
UTC() | Возвращает количество миллисекунд с 1 января 1970 для данной даты в году, месяце, дне (и, возможно, часах, минутах, секундах и миллисекундах) | Дата в миллисекундах |
значение() | Количество миллисекунд с 1 января 1970 г. | Дата в миллисекундах |
Чтобы узнать, как отображать текущую дату и время, см. Дата и время JavaScript.
Дата и время в Javascript и избежание распространенных ошибок | Эндрю Матени | Дата и время Startup
в Javascript и избежание распространенных ошибок | Эндрю Матени | Стартап | СреднийОпубликовано в
·
Чтение: 4 мин.
·
28 января 2020 г.
Photo by Aron Visuals on UnsplashЕсли вы когда-нибудь пытались программировать рабочий календарь или планировщик, вы знаете, насколько утомительными могут быть время и дата. Для тех из вас, кто еще не работал со временем или датой в Javascript, я дам вам введение, а также некоторые подводные камни, которых следует избегать.
Новый объект даты может быть создан с помощью new Date()
. Если вы вернете это, вы получите что-то, что может выглядеть немного…
Автор: Эндрю Матени
18 подписчиков
·Писатель для
От фармации к программированию. Учимся программировать день за днем. Сиэтл, Вашингтон. https://www.linkedin.com/in/drew-matheny-84760b97/
Еще от Эндрю Матени и The Startup
Эндрю Матени
Использование Git и Github в групповых проектах
90 002Работа в группе проекты в первый раз могут быть очень пугающими, если вы не очень хорошо знакомы с командами git и с тем, как они работают…
5 минут чтения·11 февраля 2020 г.
Нитин Шарма
в
0282 Бьюсь об заклад, что 99% читателей не знакомы с любым из этих инструментов.
·6 минут чтения·5 апреля
Zulie Rane
в
Если вы хотите стать творцом, удалите все (кроме двух) платформы социальных сетей
2 октября 022, во время всего Илона Маска фиаско, я наконец-то удалил Твиттер со своего телефона. Примерно в то же время я также вышел из…
·8 мин чтения·19 апреля
Эндрю Матени
в
Введение в наборы в Javascript
С выпуском ES6 в 2015 году наборы были введен в Javascript. Они похожи на хэш или массив, но с некоторыми интересными свойствами…
·3 мин чтения·17 мая 2020 г.
Просмотреть все от Эндрю Матени
Рекомендовано на Medium
Андреас Суджоно
Топ 10 Хитрый Javascript Вопросы, которые часто задают интервьюеры
10 самых каверзных вопросов по Javascript, которые часто задают интервьюеры.
Убедитесь, что вы знаете их все!·8 min read·17 декабря 2022 г.
React Dojo
Шпаргалка по техническому интервью для фронтенд-инженера (общие вопросы программирования) стесняюсь😛 спросить… Итак, вот список слов, которые ОБЯЗАТЕЛЬНО ЗНАТЬ, чтобы оставаться в игре.
·Чтение через 6 мин·16 марта
Александр Нгуен
в
Почему я продолжаю отказывать кандидатам во время собеседований в Google…
Они не соответствуют планке.
·4 минуты чтения·13 апреля
The PyCoach
в
Вы используете ChatGPT неправильно! Вот как опередить 99% пользователей ChatGPT
Освойте ChatGPT, изучив технику быстрого доступа.
·7 минут чтения·17 марта
Мелих Юмак
в