Получение текущей даты в миллисекундах (UTC) (без использования строк)

Ну, вы можете подумать, что этот вопрос уже задавался, но я думаю, что это не так. Решения, о которых я все читал, имели эту «головоломку». техника (какgetUTCMonth() + getUTCMinutes + ...). But as I only want to compare the elapsed seconds between two UTC (!) dates, this does not apply.

Как всем известно, вы можете получить текущую (не UTC) дату:

var d = new Date();
var t_millis = d.getTime();

Но это НЕ то, что я хочу. Я бы хотел, чтобы текущая системная дата была в UTCand в миллисекундах, так что не связывайтесь со строками вообще. AFAIK переменнаяt_millis будет содержать значение миллисекунды текущей отметки времени в GMT, а не в формате UTC. (Посколькуd также в GMT.Unless getTime () выполняет своего рода неявное преобразование часового пояса, т.е. е. добавление смещенияBEFORE выдает миллисекунды, но я никогда об этом нигде не читал)

Так нет ли другого способа, кроме добавления смещения к значению времени? Я отчаянно скучаю по такой функции, какgetUTCTimeMillis() известен из других языков.

 syntaxerror03 июн. 2012 г., 18:58
Да, UTC - это время по Гринвичу ... Я должен был сказать "местное время". Виноват. Когда я имею в виду «GMT», я обычно имею в виду противоположность UTC, т.е. е. местное время, показанное по смещению GMT +/-, в то время как UTC = константа.
 Andrew Leach01 июн. 2012 г., 23:10
Я не понимаю. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯявляетс GMT, во всех отношениях.

Ответы на вопрос(5)

как насчет

var now = new Date();
var utc_now = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),  now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
console.log('UTC: ' + utc_now) // correct UTC time but wrong timezone!
console.log('UTC (in ms): ' + utc_now.getTime())
 Odys12 апр. 2014 г., 00:09
@ RyanQ, если он сделает то, что будет разница междуnow а такжеutc_now? В этом весь смысл.
 Ryan Q30 сент. 2013 г., 23:46
Просто к сведению, что вы можете оставить часть UTC. (IE now.getFullYear () вместо now.getUTCFullYear ()).

Это старый вопрос, но ради новых посетителей здеПРАВИЛЬНЫ ответ

Date.now();

Возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC

его часового пояса. То есть на планете Земля нет часовых поясов, которые отличались бы друг от друга на количество миллисекунд больше нуля. (Они могут отличаться на целое число часов или даже минут, но не секунд или миллисекунд.)

Тем не менее, ценность, которую вы получаете отgetTime() являетс UTC-относительная временная метка. Если два веб-браузера в разных точках земного шара создают объект Date одновременно, они оба получат одинаковое значение от.getTime() (при условии, что часы синхронизированы, что, конечно, крайне маловероятно).

Here: 1338585185539 Это временная метка, которую я только что получил из своего браузера. Я в Остине, штат Техас, и сейчас 4:13 дня (так что отметка времени будет немного раньше). Подключите его к экземпляру Date на вашем компьютере и посмотрите, что он говорит.

(редактироват - для потомков эта временная метка с 1 июня 2012 года.)

 Pointy21 авг. 2013 г., 20:35
@ Тео да? Функции даты в формате UTC присутствуют, потому что все не-UTC API сообщают время / дату относительно местного часового пояса.
 Sandman21 авг. 2013 г., 20:50
getTime () - относительное значение часового пояса, а не относительное значение UTC (вот почему оно везде одинаковое), а getTime () вообще не конвертирует, верно? Если вам нужна какая-либо синхронизация между часовыми поясами (поэтому я подозреваю, что этот вопрос был задан в первую очередь), вам понадобится общая ссылка UTC. Если вы хотите измерять только прошедшее время в вашем местном часовом поясе, это не имеет значения, вы можете использовать getTime ()
 Sandman21 авг. 2013 г., 20:43
Извините за неполное сообщение (я пытался дать ссылку на абзац в Википедии). Да, но есть две вещи, с которыми я на самом деле не согласен, надеюсь, я не ошибаюсь: getTime () является меткой времени относительно UTC и что преобразование GMT-в-UTC (или любое преобразование) должно быть неявным выполняется перед вычислением getTime ()
 Sandman21 авг. 2013 г., 20:32
Извините, но я не согласен с этим. Действительно, время, прошедшее с 1970 года в одном часовом поясе, идентично времени в любом другом часовом поясе, но UTC - это нечто другое. Почему у вас так много функций, параллельных стандартным функциям Date, в названии которых указано UTC? Вот объяснение, почему UTC почти такой же, как GMT, но не совсем:
 syntaxerror03 июн. 2012 г., 18:50
Благодарность! Да, я понимаю это сейчас. Так что, если мы уверены, что объект Date определенно является значением GMT, мы можем логически заключить, что getTime () должен незаметно выполнять преобразование GMT в UTCд подсчет миллисекунд.

Я использовал эту функцию для решения проблемы.

function getUTCNow()
{
    var now = new Date();
    var time = now.getTime();
    var offset = now.getTimezoneOffset();
    offset = offset * 60000;
    return time - offset;
}
Функция getTime возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 в часовом поясе клиента.getTimezoneOffset смещение возврата в минутах между часовым поясом клиента и UTC.offset = смещение * 60000; эта операция преобразует минуты в миллисекунды. Вычитая смещение, выведите количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC.
 Noah Allen18 авг. 2018 г., 21:20
Я не думаю, что это правильно. Согласно с MDN: getTime() always uses UTC for time representation. For example, a client browser in one timezone, getTime() will be the same as a client browser in any other timezone.. Кроме того, они говорят, что возвращаемое значение равноA number representing the milliseconds elapsed between 1 January 1970 00:00:00 UTC and the given date. Н количество миллисекунд в часовом поясе клиента.
 Mr. Polywhirl14 февр. 2017 г., 17:40
Вот одна строка для текущих браузеров:Date.nowUTC=()=>(d=>d.getTime()-(d.getTimezoneOffset()*6e4))(new Date())
 jolumg30 нояб. 2018 г., 13:33
Это неправильно, getTime возвращается в UTC!
 Blacknet11 дек. 2015 г., 08:32
Функция getTime возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 в часовом поясе клиента. getTimezoneOffset возвращает смещение в минутах между часовым поясом клиента и UTC. смещение = смещение * 60000; эта операция преобразует минуты в миллисекунды. вычитая смещение, мы получаем количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC.

необходимо принять во внимание часовой пояс и летнее время для этой даты. Например, дата в январе или июле может означать разницу в 1 ча

Опция ниже делает именно это.

Date.prototype.getUTCTime = function () {
    return this.getTime() - (this.getTimezoneOffset() * 60000);
};

Может использоваться как в:

var date = new Date();
var timestamp = date.getUTCTime();

Ваш ответ на вопрос