Преобразование метки времени Unix во время в JavaScript - PullRequest
971 голосов
/ 11 мая 2009

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

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

Ответы [ 26 ]

1489 голосов
/ 11 мая 2009
// Create a new JavaScript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds.
var date = new Date(unix_timestamp*1000);
// Hours part from the timestamp
var hours = date.getHours();
// Minutes part from the timestamp
var minutes = "0" + date.getMinutes();
// Seconds part from the timestamp
var seconds = "0" + date.getSeconds();

// Will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);

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

263 голосов
/ 21 мая 2011

function timeConverter(UNIX_timestamp){
  var a = new Date(UNIX_timestamp * 1000);
  var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  var year = a.getFullYear();
  var month = months[a.getMonth()];
  var date = a.getDate();
  var hour = a.getHours();
  var min = a.getMinutes();
  var sec = a.getSeconds();
  var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
  return time;
}
console.log(timeConverter(0));
167 голосов
/ 11 мая 2009

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

var date = new Date(UNIX_Timestamp * 1000);
// Manipulate JavaScript Date object here...
73 голосов
/ 12 октября 2012

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

new Date(unix_timestamp * 1000).format('h:i:s')
49 голосов
/ 09 марта 2016

Вот самое короткое однострочное решение для форматирования секунд как hh:mm:ss:

/**
 * Convert seconds to time string (hh:mm:ss).
 *
 * @param Number s
 *
 * @return String
 */
function time(s) {
    return new Date(s * 1e3).toISOString().slice(-13, -5);
}

console.log( time(12345) );  // "03:25:45"

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

N.B .: Это решение не требует сторонних библиотек и поддерживается во всех современных браузерах и движках JavaScript.

40 голосов
/ 09 мая 2018

Использование:

var s = new Date(1504095567183).toLocaleDateString("en-US")
// expected output "8/30/2017"   

и за время:

var s = new Date(1504095567183).toLocaleTimeString("en-US") 
// expected output "3:19:27 PM"`

см. Date.prototype.toLocaleDateString ()

26 голосов
/ 11 ноября 2013

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

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

var timestamp = moment.unix(1293683278);
console.log( timestamp.format("HH/mm/ss") );

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

var now = moment("2010-10-10 12:03:15");
console.log( now.format("HH/mm/ss") );
21 голосов
/ 11 мая 2009

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

Аргументом даты в объекте 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 + '<br>');

    }

tm(60);
tm(86400);

дает:

1/1/0 -- Thu Jan 01 1970 01:01:00 GMT+0100 (Central European Standard Time)
1/0/0 -- Fri Jan 02 1970 01:00:00 GMT+0100 (Central European Standard Time)
16 голосов
/ 10 августа 2015

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

var dateTimeString = moment(1439198499).format("DD-MM-YYYY HH:mm:ss");

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

var timeString = moment(1439198499).format("HH:mm:ss");
15 голосов
/ 01 ноября 2011

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

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

...