Obtenir le même horodatage unix pour deux temps différents en javascript

J’avais deux horodatages au format ical et je veux d’abord les convertir en temps normal, puis en temps unix.

Voici la fonction que j’ai utilisée pour convertir l’heure normale en horodatage unix:

var normal_to_unix = function (date_ssortingng) { var date = new Date(date_ssortingng); return date.getTime() / 1000; } 

Cette fonction est correcte car la date est déjà en UTC et je n’ai pas besoin de faire de conversion.

Maintenant, c’est la fonction que j’ai utilisée pour convertir le temps en temps unix. Le temps ical dans mon cas est comme "20180603T150000Z" .

 var ics_to_unix = function (ics_ssortingng) { var year = ics_ssortingng.slice(0, 4); var month = ics_ssortingng.slice(4, 6); var date = ics_ssortingng.slice(6, 8); var hours = ics_ssortingng.slice(9, 11); var minutes = ics_ssortingng.slice(11, 13); var seconds = ics_ssortingng.slice(13, 15); var milliseconds = 0; console.log(year, month, date, hours, minutes, seconds, milliseconds); // This is example output 2018 06 03 15 00 00 0 return normal_to_unix((new Date(year, month, date, hours, minutes, seconds, milliseconds)).toDateSsortingng()) } 

Maintenant, le problème est que je reçois le même temps unix pour "20180603T150000Z" et "20180603T160000Z" qui sont censés donner des horodatages différents et il est 1530576000 pour les deux.

Y a-t-il quelque chose qui me manque? Merci d’avance.

S’il vous plaît jeter un oeil à cet exemple en direct

Plusieurs points ici:

La méthode toDateSsortingng () renvoie la partie date d’un object Date sous une forme lisible en anglais américain. Pour votre exemple, c’est le mardi 3 juillet 2018, ce n’est peut-être pas ce que vous voulez.

new Date crée une date dans votre fuseau horaire local, qui pourrait bien jouer si vous l’utilisez avec toSsortingng() , qui renverra également la chaîne de date dans votre fuseau horaire local. Mais il sera soumis à des changements d’heure d’été, alors évitez d’utiliser cette méthode.

Une autre chose que je voudrais éviter de convertir entre les chaînes et les dates, car il effectue beaucoup de calculs inutiles.

Je suggère d’utiliser les éléments suivants:

 var ics_to_unix = function (ics_ssortingng) { var year = parseInt(ics_ssortingng.slice(0, 4)); var month = parseInt(ics_ssortingng.slice(4, 6)) - 1; // Jan is 0 var date = parseInt(ics_ssortingng.slice(6, 8)); var hours = parseInt(ics_ssortingng.slice(9, 11)); var minutes = parseInt(ics_ssortingng.slice(11, 13)); var seconds = parseInt(ics_ssortingng.slice(13, 15)); return Date.UTC(year, month, date, hours, minutes, seconds) / 1000; } 

J’ai ajouté une conversion explicite des chaînes en nombres, ajusté le mois pour correspondre à ce qui est utilisé en javascript et également supprimé l’appel supplémentaire.