convertir la date iso en millisecondes en javascript

87

Puis-je convertir une date iso en millisecondes? par exemple je veux convertir cet iso

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

en millisecondes.

Parce que je veux comparer la date actuelle à la date de création. Et la date de création est une date iso.

Robin Carlo Catacutan
la source
1
Qu'entendez-vous exactement par «millisecondes»? Millisecondes par rapport à quel moment? Voulez-vous dire un horodatage UNIX?
Pekka
tout comme dans l'API Yahoo, la date est affichée en millisecondes 1328796537, mais dans l'API fb, la date est affichée en iso2012-02-10T13:18:45+0000
Robin Carlo Catacutan
duplication possible de l' aide à l'analyse de la date ISO 8601 en Javascript
mplungjan
@mplungjan lié, mais pas exact. Je veux voir la différence entre les deux temps.
Robin Carlo Catacutan
Alors utilisez le lien pour les traduire d'abord en dates et faites date1.getTime() - date2.getTime()- c'est tout ce dont vous avez besoin
mplungjan

Réponses:

145

Essaye ça

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);

ÉDITER

Vous avez fourni une date ISO. Il est également accepté par le constructeur de l' Dateobjet

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

Éditer

Le mieux que j'ai trouvé est de supprimer le décalage manuellement.

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);

Semble fonctionner. En ce qui concerne les problèmes de conversion de la chaîne ISO en Dateobjet, vous pouvez vous référer aux liens fournis.

ÉDITER

Correction du bug avec une conversion incorrecte en millisecondes selon le commentaire de Prasad19sara.

Oybek
la source
Oui, Date ne sera pas analysé sur tous les navigateurs. Voir ma réponse sur une question connexe.
Vik David
Et voir mon commentaire sur la réponse sous le vôtre;)
mplungjan
Cela ne fonctionne pas dans Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan
1
@mplungjan pourquoi n'utilisez-vous pas cette approche ? Je sais que c'est encombrant mais de toute façon))
Oybek
euh ... c'est ce "T" majuscule là-dedans? C'est pourquoi cela ne fonctionne pas @mplungjan.
wle8300
28

Un raccourci des solutions précédentes est

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

Il effectue une conversion de type à la volée et génère directement la date au format milliseconde.

Une autre méthode consiste également à utiliser la méthode d'analyse de Date util qui ne produit que l'heure EPOCH en millisecondes.

var myDate = Date.parse("2012-02-10T13:19:11+0000");
Tahsin Turkoz
la source
Vous avez une petite faute de frappe là-bas, '+'
Stuart Siegler
@ stuart-siegler Ce n'est en fait pas une faute de frappe, le '+' renvoie la date en millisecondes.
LordTribual
@LordTribual "+ new" renvoie la date en millisecondes?
Stuart Siegler
1
@ stuart-siegler Pas spécifiquement "+ new" mais le "+" fait l'affaire et est un raccourci pour ainsi dire. Par exemple, +new Date()renvoie 1447857230137le temps en millisecondes.
LordTribual
1
Il est beaucoup plus clair de construire explicitement un objet JavaScript Number:, const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))mais new Date('2017-09-26T20:24:18.801Z').getTime()ou new Date('2017-09-26T20:24:18.801Z').valueOf()est encore plus lisible.
David G du
5

Une autre option à partir de 2017 est d'utiliser Date.parse(). La documentation de MDN indique cependant qu'elle n'est pas fiable avant ES5.

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

Voir le violon pour plus de détails.

samouraï_jane
la source
L'analyseur intégré n'est pas fiable après ECMAScript 2011 également. :-)
RobG
2

Une autre solution possible consiste à comparer avec la date actuelle January 1, 1970, vous pouvez obtenir January 1, 1970par new Date(0);

var date = new Date(); 
var myDate= date - new Date(0);
LingYan Meng
la source
2

Oui, vous pouvez le faire en une seule ligne

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673
Mohid Kazi
la source
Quel est le contraire de cette fonction!?
AG1
1

Une autre solution pourrait être d'utiliser l'analyseur d'objet Number comme ceci:

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);

Cela se convertit en millisecondes comme getTime()sur un Dateobjet

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

En utilisant cela, nous pouvons obtenir la date en millisecondes

JibinNajeeb
la source
0

var date = nouvelle date (date_string); var millisecondes = date.getTime ();

Cela a fonctionné pour moi!

Visakh Vijayan
la source
0

si veut convertir la date UTC en millisecondes
syntaxe: Date.UTC (année, mois,? jour,? heures,? min,? sec,? millisec);
par exemple :
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);

Siddharth
la source
0

Si quelqu'un souhaite saisir uniquement l'heure d' une date ISO, il sera utile de suivre les instructions suivantes. Je cherchais cela et je n'ai pas trouvé de question pour cela. Donc, au cas où quelqu'un verrait, ce sera utile.

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

La sortie sera la seule heure depuis isoDate qui est,

15:27
Niroshan Ratnayake
la source