Ho utilizzato l'API Javascript per un'applicazione calendario e ho notato che per ogni mese tra 3 e 9 (aprile e novembre) i metodi Date.getDay()
e Date.getUTCDay()
restituiscono risultati diversi.
Per ciascuno di questi mesi, Date.getUTCDay()
restituirà costantemente lo stesso valore di Date.getDay() - 1
.
Alla fine ho notato che ciò accadeva solo quando ho costruito le date con il costruttore predefinito. Una volta provato a utilizzare il metodo Date.UTC()
per creare le date, tutto è andato come previsto.
Vale a dire:
Date date = null;
for (var month = 0; month < 12; month++) {
date = new Date(2014, month, 1);
if (date.getUTCDay() !== date.getDay()) {
console.log(month);
}
}
Emetterà: 3, 4, 5, 6, 7, 8 e 9.
Date date = null;
for (var month = 0; month < 12; month++) {
date = new Date(Date.UTC(2014, month, 1));
if (date.getUTCDay() !== date.getDay()) {
console.log(month);
}
}
Non produrrà nulla.
Suppongo che abbia qualcosa a che fare con l'ora legale, ma mi piacerebbe avere ancora qualche approfondimento su cosa sta succedendo e perché.
A parte questo, suppongo anche che questo non sia qualcosa di specificamente correlato a Javascript, motivo per cui ho taggato la domanda con language-agnostic
. Sentiti libero di re-tag come appropriato.
Modifica: Completamente dimenticato di aggiornare il titolo dopo aver scritto la domanda. Mi scuso.