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.

Stan
la source
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 .

fguillen
la source
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.

theVinchi
la source
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();
Mahus
la source
10

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

KARTHIKEYAN.A
la source
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.

hybride9
la source
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

Vous pouvez utiliser Date.parse () , mais les formats d'entrée qu'il accepte dépendent de l'implémentation. Cependant, si vous pouvez convertir la date au format ISO (AAAA-MM-JJ) , la plupart des implémentations devraient le comprendre.

Voir Pourquoi Date.parse donne-t-il des résultats incorrects? .

Barmar
la source
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()).

Dumitru
la source
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

Nazar
la source
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;
OptimusCrime
la source
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'
Damodar Bashyal
la source
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

Rajat
la source