Perché le date UTC hanno diversi giorni della settimana per alcuni mesi?

1

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.

    
posta Daniel 04.12.2014 - 16:05
fonte

1 risposta

2

Stai costruendo le date in base all'ora locale di mezzanotte. Durante l'ora legale, a cui l'UTC non segue, l'ora locale di mezzanotte è uguale alle 11:00. il giorno prima dell'ora UTC, se il fuso orario locale è impostato su Londra / Europa occidentale.

    
risposta data 04.12.2014 - 16:23
fonte

Leggi altre domande sui tag