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


87

Могу ли я преобразовать дату iso в миллисекунды? например, я хочу преобразовать этот iso

2012-02-10T13:19:11+0000

в миллисекунды.

Потому что я хочу сравнить текущую дату с датой создания. Дата создания - это дата iso.


1
Что именно вы имеете в виду под «миллисекундами»? Миллисекунды относительно какого момента времени? Вы имеете в виду временную метку UNIX?
Pekka

как и в yahoo api, дата отображается в миллисекундах 1328796537, но в fb api дата отображается в 2012-02-10T13:18:45+0000
формате


@mplungjan связано, но не совсем точно. Я хочу увидеть разницу между двумя временами.
Робин Карло Катакутан

Так что используйте ссылку, чтобы сначала перевести их на даты, и делайте date1.getTime() - date2.getTime()- это все, что вам нужно
mplungjan

Ответы:


145

Попробуй это

var date = new Date("11/21/1987 16:00:00"); // some mock date
var milliseconds = date.getTime(); 
// This will return you the number of milliseconds
// elapsed from January 1, 1970 
// if your date is less than that date, the value will be negative

console.log(milliseconds);

РЕДАКТИРОВАТЬ

Вы ввели дату ISO. Это также принимается конструктором Dateобъекта

var myDate = new Date("2012-02-10T13:19:11+0000");
var result = myDate.getTime();
console.log(result);

редактировать

Лучшее, что я нашел, - это избавиться от смещения вручную.

var myDate = new Date("2012-02-10T13:19:11+0000");
var offset = myDate.getTimezoneOffset() * 60 * 1000;

var withOffset = myDate.getTime();
var withoutOffset = withOffset - offset;
console.log(withOffset);
console.log(withoutOffset);

Кажется, работает. Что касается проблем с преобразованием строки ISO в Dateобъект, вы можете обратиться к предоставленным ссылкам.

РЕДАКТИРОВАТЬ

Исправлена ​​ошибка с некорректным преобразованием в миллисекунды согласно комментарию Prasad19sara.


Да, Date не будет анализироваться во всех браузерах. См. Мой ответ на связанный вопрос.
Вик Дэвид

И посмотрите мой комментарий к ответу под вашим;)
mplungjan

Это не работает в Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan

1
@mplungjan, почему вы не используете этот подход ? Я знаю, что это громоздко, но все равно))
Ойбек

эээ ... это та заглавная буква "Т" там делает? Вот почему не работает @mplungjan.
wle8300

28

Сокращение предыдущих решений:

var myDate = +new Date("2012-02-10T13:19:11+0000");

Он выполняет преобразование типа «на лету» и напрямую выводит дату в миллисекундном формате.

Другой способ - использовать метод синтаксического анализа Date util, который выводит только время EPOCH в миллисекундах.

var myDate = Date.parse("2012-02-10T13:19:11+0000");

У вас небольшая опечатка, '+'
Стюарт Сиглер

@ stuart-siegler На самом деле это не опечатка, "+" возвращает дату в миллисекундах.
LordTribual

@LordTribual "+ новый" возвращает дату в миллисекундах?
Стюарт Сиглер

1
@ stuart-siegler Не специально "+ new", но "+" помогает и является сокращением, так сказать. Например, +new Date()возвращает 1447857230137время в миллисекундах.
LordTribual

1
Гораздо яснее явно создать объект JavaScript Number:, const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))ноnew Date('2017-09-26T20:24:18.801Z').getTime() или new Date('2017-09-26T20:24:18.801Z').valueOf()он даже более удобочитаем.
Дэвид Джи

5

Другой вариант с 2017 года - использовать Date.parse(). Однако в документации MDN указывается, что до ES5 он был ненадежным.

var date = new Date(); // today's date and time in ISO format
var myDate = Date.parse(date);

Смотрите скрипку для более подробной информации.


Встроенный парсер также ненадежен после ECMAScript 2011. :-)
RobG

2

Другим возможным решением является сравнение текущей даты с January 1, 1970, вы можете получить January 1, 1970по new Date(0);

var date = new Date(); 
var myDate= date - new Date(0);

2

Да, вы можете сделать это в одной строке

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673

Что противоположно этой функции !?
AG1

1

Другим решением может быть использование парсера объекта Number следующим образом:

let result = Number(new Date("2012-02-10T13:19:11+0000"));
let resultWithGetTime = (new Date("2012-02-10T13:19:11+0000")).getTime();
console.log(result);
console.log(resultWithGetTime);

Это преобразуется в миллисекунды, как и getTime()на Dateобъекте


0
var date = new Date()
console.log(" Date in MS last three digit = "+  date.getMilliseconds())
console.log(" MS = "+ Date.now())

Используя это, мы можем получить дату в миллисекундах



0

если хотите преобразовать дату UTC в миллисекунды,
синтаксис: Date.UTC (год, месяц,? день,? часы,? min,? sec,? milisec);
например:
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);


0

В случае, если кто-то хочет получить только время из даты ISO, следующее будет полезно. Я искал это и не мог найти к нему вопроса. Так что в случае, если кто-то увидит, будет полезно.

let isoDate = '2020-09-28T15:27:15+05:30';
let result = isoDate.match(/\d\d:\d\d/);
console.log(result[0]);

На выходе будет единственное время из isoDate, которое

15:27
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.