Как получить метку времени UTC в JavaScript? - PullRequest
137 голосов
/ 18 марта 2012

При написании веб-приложения имеет смысл хранить (на стороне сервера) все даты и времени в БД в качестве меток времени UTC.

Я был удивлен, когда заметил, что вы не можете сделать многое с точки зрения манипуляции с часовым поясом в JavaScript.

Я немного расширил объект Date. Имеет ли эта функция смысл? По сути, каждый раз, когда я отправляю что-либо на сервер, это будет отметка времени, отформатированная с помощью этой функции ...

Вы видите здесь какие-либо серьезные проблемы? Или, может быть, решение под другим углом?

* * 1010

Мне это кажется немного запутанным. И я не так уверен в производительности.

Ответы [ 15 ]

1 голос
/ 21 марта 2015

Я хочу пояснить, что new Date (). GetTime () действительно возвращает значение UTC, так что это действительно полезный способ хранения и управления датами способом, не зависящим от локализованного времени.

Другими словами, не беспокойтесь обо всех функциях JavaScript UTC. Вместо этого просто используйте Date.getTime ().

Более подробную информацию об объяснении можно найти здесь: Если javascript "(new Date ()). GetTime ()" запущен из 2 разных часовых поясов.

1 голос
/ 31 мая 2014

Я поражен тем, насколько сложным стал этот вопрос.

Все они идентичны, и все их целочисленные значения === Время EPOCH: D

console.log((new Date()).getTime() / 1000, new Date().valueOf() / 1000, (new Date() - new Date().getTimezoneOffset() * 60 * 1000) / 1000);

Не верьте мне, оформить заказ: http://www.epochconverter.com/

1 голос
/ 18 марта 2012

РЕДАКТИРОВАТЬ: приведенный ниже код НЕ работает. Я всегда предполагал, что new Date (). GetTime () вернул количество секунд с 1 января 1970 г. В ТЕКУЩЕЙ ВРЕМЕННОЙ ЗОНЕ. Это не так: getTime () возвращает количество секунд в UTC. Итак, приведенный ниже код делает грубую перестройку. Спасибо всем!]

Прежде всего, спасибо за ваши фантастические идеи. Наверное, у моего вопроса был неправильный заголовок ... это должно было быть "Получить UTC Unix Timestamp для существующей даты".

Итак, если у меня есть объект даты:

var d = new Date(2009,01,31)

Я был за функцией, которая сообщала бы мне «UTC Unix Timestamp».

Эта функция кажется настоящей уловкой:

Date.prototype.getUTCUnixTime =  function (){
  return Math.floor( new Date(
    this.getUTCFullYear(),
    this.getUTCMonth(),
    this.getUTCDate(),
    this.getUTCHours(),
    this.getUTCMinutes(), 
    this.getUTCSeconds()
  ).getTime() / 1000); 
}

Обратите внимание, что это работает на "это". Это означает, что я могу сделать:

var n = new Date(2008,10,10)
...
...

n.getUTCUnixTime();

И получите количество секунд с 1 января 1970 года по времени Unix. Верно?

Для меня немного безумно, что Javascript хранит все в UTC раз, но затем, чтобы получить это число, мне нужно создать новый объект Date, передавая отдельные получатели UTC, и, наконец, вызвать getTime () для этого. ..

Merc.

0 голосов
/ 27 января 2017

Возвращает метку времени в UTC:

var utc = new Date(new Date().toUTCString()).getTime();
0 голосов
/ 28 декабря 2016

Я думаю, это то, что вы ожидаете ...

var currTimestamp = Date.now(), //1482905176396
    utcDateString = (new Date(currTimestamp)).toUTCString(); //"Wed, 28 Dec 2016 06:06:50 GMT"

Теперь

new Date(utcDateString).getTime(); //This will give you UTC Timestamp in JavaScript
...