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.


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


@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.


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

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.


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

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

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


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


0

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

Cela a fonctionné pour moi!


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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.