Преобразование метки времени Unix во время в JavaScript

Я храню время в базе данных MySQL как временную метку Unix, которая отправляется в некоторый код JavaScript. Как мне выжать из этого время?

Например, в формате ЧЧ/ММ/СС.


  let unix_timestamp = 1549312452//Создайте новый объект JavaScript Date на основе временной метки//умноженной на 1000, чтобы аргумент был в миллисекундах, а не в секундах  .var date = new Date (unix_timestamp * 1000);//Часть часов от отметки времениvar hours = date.getHours ();//Часть минут от отметки времениvar minutes = "0" + date.getMinutes ();//Часть секунд  from the timestampvar seconds = "0" + date.getSeconds ();//Будет отображать время в формате 10:30:23 var formattedTime = hours + ':' + minutes.substr (-2) + ':' + seconds.substr  (-2); console.log (formattedTime);  

Для получения дополнительной информации об объекте Date, пожалуйста, обратитесь к MDN или спецификации ECMAScript 5 .


  функция timeConverter (UNIX_timestamp) {var a = new Date (UNIX_timestamp * 1000);  var months = ['Янв', 'Фев', 'Мар', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сен', 'Октябрь', 'Ноябрь', 'Дек  '];  var year = a.getFullYear ();  var month = месяцы [a.getMonth ()];  var date = a.getDate ();  var hour = a.getHours ();  var min = a.getMinutes ();  var sec = a.getSeconds ();  var time = дата + '' + месяц + '' + год + '' + час + ':' + min + ':' + sec;  время возврата;} console.log (timeConverter (0));  

3


JavaScript работает в миллисекундах, поэтому вам сначала нужно преобразовать временную метку UNIX из секунд в миллисекунды.

  var date = new Date (UNIX_Timestamp * 1000);//Здесь можно манипулировать объектом JavaScript Date ...  

0


Используйте:

  var s = new  Дата (1504095567183) .toLocaleDateString ("en-US") console.log (s)//ожидаемый результат "30.08.2017"  

и для времени:

  var s = new Date (1504095567183) .toLocaleTimeString ("en-US") console.log  (s)//ожидаемый результат "15:19:27 PM"  

см. Date.prototype.toLocaleDateString ()

3


Я неравнодушен к Date.format () Джейкоба Райта >, которая реализует форматирование даты JavaScript в стиле функции PHP date () .

  new Date (unix_timestamp * 1000). format ('h: i: s')  

2


Современное решение (на 2020 год)

В новом мире мы должны перейти к стандартному объекту JavaScript Intl , который имеет удобный конструктор DateTimeFormat с методом .format () :

  функция format_time (s) {const dtFormat = new Intl.DateTimeFormat ('en-GB', {timeStyle: 'medium', timeZone: 'UTC'});  return dtFormat.format (новая дата (s * 1e3));} console.log (format_time (12345)); //"03:25:45"  


Вечное решение

Но быть 100 % совместим со всеми устаревшими движками JavaScript, вот кратчайшее однострочное решение для форматирования секунд как hh:mm:ss:

  function format_time (s) {return new Date (s * 1e3) .toISOString (). slice (-13, -5);} console.log  (формат_время (12345)); //"03:25:45"  

Метод Date.prototype.toISOString () возвращает время в упрощенном расширенном формате ISO 8601 , который всегда имеет длину 24 или 27 символов (например, ГГГГ-ММ-ДДТЧЧ: мм : ss.sssZ или ± ГГГГГГ-ММ-ДДТЧЧ: мм: ss.sssZ соответственно). Часовой пояс всегда равен нулю смещения UTC.

Это решение не требует каких-либо сторонних библиотек и поддерживается во всех браузерах и движках JavaScript.

4


Я бы подумал об использовании библиотеки, такой как momentjs.com, которая делает это очень просто:

На основе временной метки Unix:

  var timestamp = moment.unix  (1293683278); console.log (timestamp.format ("ЧЧ/мм/сс"));  

На основе строки даты MySQL:

  var now = moment ("2010-10-10 12:03:15"); console.log (now.format ("ЧЧ/мм/сс"));  

4


кратчайшее однострочное решение для форматировать секунды как чч: мм: сс: вариант:

  console.log (новая дата  (154931  2452 * 1000) .toISOString (). Slice (0, 19) .replace ('T', ''));//"2019-02-04 20:34:12"  

2


Временная метка UNIX — это число секунд с 00:00:00 UTC 1 января 1970 г. (согласно Википедии).

Аргументом объекта Date в Javascript является количество миллисекунд с 00:00:00 UTC 1 января 1970 г. (согласно документации Javascript W3Schools).

См. пример кода ниже:

  function tm (unix_tm) {var dt = new Date (unix_tm * 1000);  document.writeln (dt.getHours () + '/' + dt.getMinutes () + '/' + dt.getSeconds () + '-' + dt + '
'); } tm (60); tm (86400);

дает:

  1/1/0 - четверг, 01 января  1970 01:01:00 GMT + 0100 (центральноевропейское стандартное время) 1/0/0 - пт 2 января 1970 01:00:00 GMT + 0100 (центральноевропейское стандартное время)  

0


В данный момент вы должны использовать временную метку unix:

  const dateTimeString = moment.unix (1466760005) .format ("ДД-ММ-ГГГГ ЧЧ: мм: сс");  

0


Используя Moment.js, вы можете получить время и дату следующим образом:

  var dateTimeString = moment (1439198499) .format ("ДД-ММ-ГГГГ ЧЧ: мм: сс");  

И вы можете получить только время, используя это:

  var timeString = moment (1439198499) .format ("HH: mm: ss");  

4


Проблема с вышеупомянутыми решениями заключается в том, что если час, минута или секунда имеют только одну цифру (т.е. 0-9) время будет неправильным, например это может быть 2: 3: 9, но скорее 02:03:09.

Судя по этой странице, лучшим решением будет использовать метод Date «toLocaleTimeString».

2


Другой способ — с даты ISO 8601.

  var timestamp = 1293683278; var date = new Date (timestamp * 1000); var iso = date.toISOString  () .match (/( d {2}:  d {2}:  d {2})/) alert (iso [1]);  

2


Это работает с отметками времени PHP

  var d = 1541415288860;//var d = val.timestamp;//NB:  используйте + перед именем переменной var date = new Date (+ d); console.log (d); console.log (date.toDateString ()); console.log (date.getFullYear ()); console.log (date.getMinutes  ()); console.log (date.getSeconds ()  ); console.log (date.getHours ()); console.log (date.toLocaleTimeString ());  

   var d = val.timestamp; var date = new Date (+ d); //NB: используйте + перед именем переменнойconsole.log (d); console.log (date.toDateString ()); console.log (date.getFullYear ()); console.log (date. getMinutes ()); console.log (date.getSeconds ()); console.log (date.getHours ()); console.log (date.toLocaleTimeString ());  

приведенные выше методы сгенерируют эти результаты

  1541415288860Mon 05 ноя 2018 2018 54 48 131: 54: 48 PM  

Есть куча методов, которые отлично работают с отметками времени. Не могу перечислить их все


Основываясь на ответе @shomrat, вот фрагмент, который автоматически записывает дату и время, как это (немного похоже на дату ответов StackOverflow: ответил 6 ноября '16 в 11:51 ):

  сегодня, 11:23  

или

  вчера, 11:23  

или (если другой, но тот же год, что и сегодня)

  6 ноября, 11:23  

или (если другой год, чем сегодня)

  6 ноября 2016 г., 11:23  

  функция timeConverter (t) {var a = new Date (t * 1000);  var сегодня = новая дата ();  var вчера = новая дата (Date.now () - 86400000);  var months = ['Янв', 'Фев', 'Мар', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сен', 'Октябрь', 'Ноябрь', 'Дек  '];  var year = a.getFullYear ();  var month = месяцы [a.getMonth ()];  var date = a.getDate ();  var hour = a.getHours ();  var min = a.getMinutes ();  if (a.setHours (0,0,0,0) == today.setHours (0,0,0,0)) return 'сегодня,' + час + ':' + мин;  иначе if (a.setHours (0,0,0,0) == вчера.setHours (0,0,0,0)) return 'вчера,' + час + ':' + мин;  иначе if (год == today.getFullYear ()) дата возврата + '' + месяц + ',' + час + ':' + мин;  иначе дата возврата + '' + месяц + '' + год + ',' + час + ':' + min;}  


  function getTIMESTAMP () {var date = new Date ();  var year = date.getFullYear ();  var month = ("0" + (date.getMonth () + 1)). substr (-2);  var day = ("0" + date.getDate ()). substr (-2);  var hour = ("0" + date.getHours ()). substr (-2);  var minutes = ("0" + date.getMinutes ()). substr (-2);  вар секунд = ("0" + date.getSeconds ()). substr (-2);  return year + "-" + month + "-" + day + "" + hour + ":" + minutes + ":" + seconds;}//2016-01-14 02:40:01  

1


Современное решение, которое не требует библиотеки 40 КБ:

Intl.DateTimeFormat — это не культурно империалистический способ форматирования даты/времени.

 //Настраиваем oncevar options = {//день недели: 'длинный',//месяц: 'короткий',//год: 'числовой',//день: '  numeric ', hour:' numeric ', minute:' numeric ', second:' numeric '}, intlDate = new Intl.DateTimeFormat (undefined, options);//многоразовое форматирование var timeStamp = 1412743273; console.log (intlDate.format (  новая дата (1000 * timeStamp)));  

2


Обратите внимание на нулевую проблему с некоторыми ответами. Например, метка времени 1439329773 будет ошибочно преобразована в 08.12.2015 0:49 .

Я бы посоветовал при использовании следующего для решения этой проблемы:

  var timestamp = 1439329773; //заменить вашу временную метку var date = new Date (timestamp * 1000); var formattedDate = ('0' + date.getDate ()). slice (-2) + '/' + ('0' + (date.getMonth (  ) + 1)). Slice (-2) + '/' + date.getFullYear () + '' + ('0' + date.getHours ()). Slice (-2) + ':' + ('0  '+ date.getMinutes ()). slice (-2); console.log (formattedDate);  

Теперь результат:

  08.12.2015 00:49  

0


 //Форматируем значение как две цифры 0 => 00, 1 => 01function twoDigits (value) {if (value  

2


Для преобразования метки времени в формат ЧЧ: ММ: СС можно использовать следующую функцию:

  var convertTime = function  (отметка времени, разделитель) {var pad = function (input) {return input  

Без передачи разделителя он использует : как разделитель (по умолчанию):

  time = convertTime (1061351153); //-> OUTPUT = 05:45:53  

Если вы хотите использовать / в качестве разделителя, просто передайте его как второй параметр:

  time = convertTime (920535115, '/'); //-> OUTPUT = 09/11/55  

Демо

  var convertTime = function (отметка времени, разделитель) {var pad = function (input) {return input ' + JSON.stringify ({920535115: convertTime (920535115, '/'), 1061351153: convertTime (1061351153, ':'), 1435651350: convertTime (1435651350, '-'), 1487938926  : convertTime (1487938926), 1555135551: convertTime (1555135551, '.')}, null, ' t') + '

‘;

См. также this Fiddle .


  функция timeConverter (UNIX_timestamp) {var a = new Date (UNIX_timestamp * 1000);  вар час = a.getUTCHours ();  var min = a.getUTCMinutes ();  var sec = a.getUTCSeconds ();  var time = час + ':' + min + ':' + sec;  время возврата;  }  


См. Дата/ Конвертер эпохи .

Вам нужно ParseInt , иначе это не сработает:


  if (! window.a) window.a = new Date (); var mEpoch = parseInt (UNIX_timestamp); if (mEpoch  


  function getDateTimeFromTimestamp (unixTimeStamp) {let  date = новая дата (unixTimeStamp);  return ('0' + date.getDate ()). slice (-2) + '/' + ('0' + (date.getMonth () + 1)). slice (-2) + '/' + дата  .getFullYear () + '' + ('0' + date.getHours ()). slice (-2) + ':' + ('0' + date.getMinutes ()). slice (-2);} const  myTime = getDateTimeFromTimestamp (1435986900000); консоль. журнал (myTime); //вывод 05.01.2000 11:00  

2


  (новая дата (ts * 1000) + ''). slice (16,24)  

  let ts = 1549312452; let time = (new Date (ts * 1000) + ''  ) .slice (16,24); console.log (время);  


Если вы хотите преобразовать продолжительность времени Unix в реальные часы, минуты и секунды, вы можете использовать следующий код:

  var hours = Math.floor (timestamp/60/60); var minutes = Math.floor ((timestamp - hours * 60 * 60)/60); var seconds = Math  .floor (отметка времени - часы * 60 * 60 - минут * 60); var duration = hours + ':' + minutes + ':' + seconds;  

1


Код ниже также представлены 3-значные миллисекунды, идеально подходящие для префиксов журнала консоли:

  const timeStrGet =  дата => {const milliSecsStr = date.getMilliseconds (). toString (). padStart (3, '0');  return `$ {date.toLocaleTimeString ('it-US')}. $ {milliSecsStr}`;}; setInterval (() => console.log (timeStrGet (new Date ())), 299);   


преобразовать метки времени в строку даты в js

https://momentjs.com/

  moment (). format ('YYYY  -MM-DD hh: mm: ss ');//«2020-01-10 11:55:43» момент (1578478211000) .format (' YYYY-MM-DD hh: mm: ss ');//"  2020-01-08 06:10:11 " 

0


  функция getDateTime (unixTimeStamp) {var d = new Date (unixTimeStamp);  var h = (d.getHours (). toString (). length == 1)?  ('0' + d.getHours ()): d.getHours ();  var m = (d.getMinutes (). toString (). length == 1)?  ('0' + d.getMinutes ()): d.getMinutes ();  var s = (d.getSeconds (). toString (). length == 1)?  ('0' + d.getSeconds ()): d.getSeconds ();  var time = h + '/' + m + '/' + s;  время возврата;} var myTime = getDateTime (1435986900000); console.log (myTime); //вывод 15.01.00  


ответ, данный @Aron, работает, но для меня это не сработало, поскольку я пытался преобразовать временную метку, начиная с 1980 года. Поэтому я сделал несколько изменений следующим образом

  function ConvertUnixTimeToDateForLeap (UNIX_Timestamp) {var dateObj = new  Дата (1980, 0, 1, 0, 0, 0, 0);  dateObj.setSeconds (dateObj.getSeconds () + UNIX_Timestamp);  дата возвратаObj;  } document.body.innerHTML = 'TimeStamp:' + ConvertUnixTimeToDateForLeap (1269700200);  

Итак, если у вас есть метка времени, начиная с другого десятилетия или около того , просто используйте это. Это избавило меня от головной боли.



Date.now () — JavaScript | MDN

Статический метод Date.now() возвращает количество миллисекунд, прошедших с 1 января 1970 г., 00:00:00 UTC.

Источник для этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, клонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.

Синтаксис

  var timeInMs = Date.now ();  

Возвращаемое значение

Число , представляющее миллисекунды, прошедшие с эпохи UNIX.

Polyfill

Этот метод был стандартизирован в ECMA-262 5 th редакции. Механизмы, которые не были обновлены для поддержки этого метода, могут обойти отсутствие этого метода с помощью следующей прокладки:

  if (! Date.now) {Date.now = function  now () {вернуть новую дату (). getTime ();  };}  

Примеры

Уменьшение точности времени

Чтобы обеспечить защиту от временных атак и снятия отпечатков пальцев, точность Date.now () может округляться в зависимости от настроек браузера.
В Firefox privacy.reduceTimerPrecision включен по умолчанию и по умолчанию равен 20 мкс в Firefox 59; через 60 это будет 2 мс.

  Date.now ()//1519211810362//... Date.now ();//1519129858900//...  

В Firefox вы также можете включить privacy.resistFingerprinting , точность будет 100 мс или значение privacy.resistFingerprinting.reduceTimerPrecision .microseconds , в зависимости от того, что больше.

Технические характеристики

Спецификация
ECMAScript (ECMA-262)
Определение Date.now в этой спецификации .

Совместимость с браузером

Таблицы BCD загружаются только в браузере

Таблица совместимости на этой странице создана на основе структурированных данных. Если вы хотите внести свой вклад в данные, посетите https://github.com/mdn/browser-compat-data и отправьте нам запрос на перенос.

  • Производительность. now () — предоставляет метки времени с субмиллисекундным разрешением для использования при измерении производительности веб-страницы.
  • console.time () / console.timeEnd ()
Оцените статью
clickpad.ru
Добавить комментарий