преобразовать дату 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);

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

samurai_jane
источник
Встроенный парсер также ненадежен после 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

var date = новая дата (date_string); var milliseconds = date.getTime ();

Это сработало для меня!

Висах Виджаян
источник
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
Нирошан Ратнаяке
источник