J'ai besoin de créer des objets Date à partir de chaînes de données Date pour chaque heure de chaque jour depuis l'année 2000.
Les chaînes ressemblent à ceci pour chaque heure, dans un format Month/Day/Year Hour
...
"04/02/2000 01", "04/02/2000 02", "04/02/2000 03" ...all the way to... "04/02/2000 24"
Maintenant, j'ai le code suivant, qui fonctionne très bien sauf les jours avec l'heure avancée ...
// Split At Space
var splitDate = "04/02/2000 24".split(/[ ]+/);
var hour = splitDate[1];
var day = splitDate[0];
// Split At Slashes
var dayArray = day.split("/");
if (hour === "24") {
// Months are zero-based, so subtract 1 from the month
date = new Date(Date.UTC( dayArray[2], parseInt(dayArray[0] - 1), dayArray[1], 0, 0, 0 ));
date.setDate(date.getDate() + 1);
} else {
// Months and Hours are zero-based, so subtract 1 from each
date = new Date(Date.UTC( dayArray[2], parseInt(dayArray[0] - 1), dayArray[1], hour, 0, 0 ));
};
Les jours avec l'heure d'été, comme 04/02/2000
, l'ajout d'un jour ne fonctionne pas si l'heure est 24
. Au lieu de cela, il renvoie simplement Sun, 02 Apr 2000 23:00:00 GMT
Avec Moment.js, est-il possible de détecter un jour d'heure d'été et de faire fonctionner ce code correctement?
Pour détecter DST, utilisez la méthode .isDST()
: http://momentjs.com/docs/#/query/is-daylight-saving-time/
moment([2011, 2, 12]).isDST(); // false, March 12 2011 is not DST
moment([2011, 2, 14]).isDST(); // true, March 14 2011 is DST
En utilisant ce test, vous devriez être capable de déterminer comment modifier le comportement de votre programme en conséquence.
Voici comment j'ai fait un petit vérificateur:
var curDst = dtdate.isDST()
var prevDst = moment(dtdate).clone().subtract(1, "day").isDST();
var nextDst = moment(dtdate).clone().add(1, "day").isDST();
var isDstChangeDate = (curDst !== nextDst) === true || (curDst === prevDst) !== true;