Convertir la date normale en horodatage Unix


107

Comment puis-je convertir une date normale 2012.08.10en horodatage Unix en javascript?

Fiddle: http://jsfiddle.net/J2pWj/




J'ai vu de nombreux articles ici qui le convertissent en PHP, Ruby, etc ... Mais je dois le faire dans JS.


1
duplication possible de la date
Martin York

1
Avez-vous essayé newDate.getTime () / 1000?
Gareth Parker

@LokiAstari oui, désolé. J'ai cherché mais je n'ai pas trouvé cela.
Stan

2
Peut-être que je manque quelque chose mais qui unix timestampest si fondamental dans toute l'ingénierie et l'informatique. J'aimerais qu'il y ait une méthode de commodité intégrée. J'utilise actuellementMath.floor((+new Date()) / 1000);
Mars Robertson

Réponses:


214
new Date('2012.08.10').getTime() / 1000

Consultez la documentation JavaScript Date .


1
Merci pour la page de documentation j'ai fait ce que je voulais.
Stan

32
Math.floor ou ce n'est pas un horodatage unix (il aura une décimale)
BT

@ fguillen, Mooseman, je cours et vérifie ce code. Une fois que j'ai converti l'horodatage Unix en date, il me donne le 09/08/2012 au lieu du 10/08/2012. Pourquoi donc..?
WP Learner

@ user2584538, voir ma réponse ci-dessous. Vous devez supprimer les décimales.
theVinchi

1
Le temps @Mentor UNIX est mesuré en secondes et non en millisecondes
Nicu Surdu

60
parseInt((new Date('2012.08.10').getTime() / 1000).toFixed(0))

Il est important d'ajouter le toFixed(0)pour supprimer les décimales lors de la division par 1000 pour convertir des millisecondes en secondes.

La .getTime()fonction renvoie l'horodatage en millisecondes, mais les vrais horodatages Unix sont toujours en secondes.


5
méfiez-vous simplement que cela renvoie une chaîne, pas un nombre.
Capaj

3
Bon point, réponse modifiée pour envelopper avec parseInt () pour reconvertir en entier.
theVinchi

11

Vous devriez vérifier l'api moment.js, il est très facile à utiliser et possède de nombreuses fonctionnalités intégrées.

Je pense que pour votre problème, vous pouvez utiliser quelque chose comme ceci:

var unixTimestamp = moment('2012.08.10', 'YYYY.MM.DD').unix();

10

var d = '2016-01-01T00:00:00.000Z';
console.log(new Date(d).valueOf()); // returns the number of milliseconds since the epoch


5

Vous pouvez simplement utiliser l'opérateur unaire +

(+new Date('2012.08.10')/1000).toFixed(0);

http://xkr.us/articles/javascript/unary-add/ - regardez sous Dates.


2
Je veux juste ajouter deux commentaires ici: l'opérateur unaire add + n'est pas nécessaire, comme /c'est déjà un opérateur mathématique. De plus, toFixedrenvoie une chaîne et non un nombre, au cas où le type serait important.
Laurens


3
var date = new Date('2012.08.10');
var unixTimeStamp = Math.floor(date.getTime() / 1000);

Dans ce cas, il est important de ne renvoyer qu'un nombre entier (donc une simple division ne fera pas l'affaire), et aussi de ne renvoyer que les secondes réellement écoulées (c'est pourquoi ce code utilise Math.floor()et non Math.round()).


2

Vous pouvez le faire en utilisant la méthode Date.parse ().

Date.parse($("#yourCustomDate).val())

Sortie Date.parse ("03.03.2016") -> 1456959600000

Sortie Date.parse ("2015-12-12") -> 1449878400000


1
En quoi cette réponse se différencie-t-elle de celle donnée par Barmar il y a 6 ans?
Capricorn le

1
var datestr = '2012.08.10';
var timestamp = (new Date(datestr.split(".").join("-")).getTime())/1000;

1

Après avoir comparé l'horodatage avec celui de PHP, rien de ce qui précède ne semble correct pour mon fuseau horaire. Le code ci-dessous m'a donné le même résultat que PHP, ce qui est le plus important pour le projet que je fais.

function getTimeStamp(input) {
    var parts = input.trim().split(' ');
    var date = parts[0].split('-');
	var time = (parts[1] ? parts[1] : '00:00:00').split(':');

	// NOTE:: Month: 0 = January - 11 = December.
	var d = new Date(date[0],date[1]-1,date[2],time[0],time[1],time[2]);
	return d.getTime() / 1000;
}

// USAGE::
var start = getTimeStamp('2017-08-10');
var end = getTimeStamp('2017-08-10 23:59:59');

console.log(start + ' - ' + end);

J'utilise ceci sur NodeJS, et nous avons le fuseau horaire «Australie / Sydney». Donc, j'ai dû ajouter ceci sur le fichier .env:

TZ = 'Australia/Sydney'

Ci-dessus équivaut à:

process.env.TZ = 'Australia/Sydney'

0

convertir l'horodatage en horodatage unix.

const date = 1513787412; const unixDate = new Date(date * 1000);// Dec 20 2020 (object)

pour obtenir le timeStamp après la conversion const TimeStamp = new Date(date*1000).getTime(); //1513787412000

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.