Содержание

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 — JavaScript
new Date(1646944886676).getMonth()
2

Мы получили 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 [описание времени или формата вывода]

Формат ввода даты и времени

Для начала рассмотрим вопрос установки текущих даты и времени, так как данное действие выполняется достаточно просто (единственная сложность связана с запоминанием формата даты и времени). Вы можете самостоятельно выполнить команду

man 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).

Из-за того, что с этой даты прошло достаточно много времени, а для хранения количества секунд в 32-битных системах используется 4-байтовое целочисленное значение, в 2038 году на этих системах должен произойти переход счетчика секунд через нулевое значение. Ввиду того, что подсчитывается лишь количество секунд, век попросту не принимается во внимание. Таким образом, на 32-битных системах значения года от 00 до 38 соответствуют 2000-м годам, а значения года от 70 до 99 — 1900 годам. Фактически, на 32-битных системах команда date не позволяет установить год, не входящий в приведенные выше диапазоны. В 64-битных системах все проще: для подсчета времени используется 8-байтовое целочисленное значение, поэтому имеется огромный запас по времени (292 миллиарда лет), доступен полный диапазон годов от 00 до 99, а век вычисляется обычным образом по количеству прошедших секунд.

Для установки текущих даты и времени необходимы права пользователя 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 означает универсальное скоординированное время

, которое относится ко времени, установленному стандартом мирового времени. Раньше его называли средним временем по Гринвичу или GMT.

год..
Функция Описание Возвращаемые значения
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 марта

Мелих Юмак

в

Дорожная карта разработчика Nodejs 2023

Изучите дорожную карту разработчика Nodejs на 2023 год.