Quiz: 14 domande su JavaScript Date
Impara a stupire alle feste con le curiosità su JS! ✨
Quanto conosci davvero la classe Date?
- Dimostra le tue skill in JavaScript! 🚀
- Nessuna registrazione richiesta. ✨
- Scelta multipla. 🤖 … Quanto potrà mai essere difficile?
Panoramica
La classe Date in JavaScript ha un’API notoriamente ostica. È stata ereditata da Java e posso solo ipotizzare che sia stata ispirata da metodi di misurazione del tempo del neolitico.
La difficoltà nel gestire le Date spinge molti sviluppatori a usare librerie di terze parti senza farsi domande. Sebbene sia spesso una scelta sicura e affidabile, queste librerie sono raramente necessarie per la formattazione delle date o la localizzazione!
Questo quiz è progettato per testare (e approfondire) la tua conoscenza dell’API nativa Date. Usa i pulsanti verdi per suggerimenti e spiegazioni! Spero che alla fine della sfida avrai consolidato la tua comprensione delle Date in JavaScript.
NOTA: Tutti gli esempi assumono come fuso orario locale GMT-7.
👇 14 Domande qui sotto 👇
Quale sarà l’output?
const d1 = new Date(2020, 1, 1)console.log(d1)L’argomento relativo al mese è basato su zero, con un intervallo 0-11 (utilizzando i calendari occidentali).
‘February’ ha un valore di indice pari a uno. (Pensalo come alla ricerca di un elemento in un array.)
Cosa includerà l’output?
const d2 = new Date(2020, 0, 1)console.log(d2)L’argomento relativo al mese (Month) è basato su zero, con un intervallo 0-11 (utilizzando i calendari occidentali).
‘January’ ha un valore di indice pari a zero. (Pensalo come alla ricerca di un elemento in un array.)
Cosa includerà l’output?
const d3 = Date('Thu, 01 Jan 1970 00:00:00 GMT')console.log(d3)Non dimenticare la keyword new! Date è una classe e dovrebbe essere chiamata con new.
Date('...') senza new ignora l’argomento fornito. Sembra produrre sempre la data e l’ora correnti come farebbe new Date() (senza argomenti).
Questo è un errore comune che è facile da trascurare, persino durante una code review.
Quale sarà l’output incluso?
const date = new Date(2020)console.log(date.getFullYear())Un’istanza di Date creata con un singolo argomento intero viene interpretata come un valore Unix Epoch. L’Epoch è il conteggio dei millisecondi a partire dal 1° gennaio 1970.
Un valore di 2020 (millisecondi) si traduce in 2 secondi dopo il 1° gennaio 1970.
Dato che il nostro fuso orario locale ha un offset negativo di -7 ore, finiamo con Wed Dec 31 1969 17:00:02 GMT-0700 (Mountain Standard Time).
Puoi evitare l’offset del fuso orario locale utilizzando .getUTCFullYear().
Quale valore verrà stampato nella console?
const d1 = new Date('2020-01-01')const d2 = new Date('2020-01-01T00:00')console.log(d1.getFullYear(), d2.getFullYear())La stringa senza il valore temporale T potrebbe sembrare il 1° gennaio 2020 - ma le stringhe di sola data vengono interpretate come UTC e, quando adattate al nostro fuso orario locale (GMT-7), scopriamo di essere ancora nel 2019.
Le stringhe data-ora senza un fuso orario esplicito vengono interpretate nell’ora locale.
Il formato T00:00 fa sì che il secondo valore venga interpretato come la mezzanotte locale.
La prima data viene interpretata come Tue Dec 31 2019 17:00:00 GMT-0700 (Mountain Standard Time).
La seconda data viene interpretata come Wed Jan 01 2020 00:00:00 GMT-0700 (Mountain Standard Time).
Seleziona un metodo di formattazione errato:
Il metodo toLocaleFormat() non è standard! Potrebbe sembrarti familiare perché appartiene a una vecchia libreria di terze parti.
Dai un’occhiata alla documentazione di toLocaleDateString. Il suo comportamento è documentato sotto Intl.DateTimeFormat.
Cosa includerà l’output?
var date = Date.UTC('2020-01-02T00:00')console.log(date.toUTCString())Otterrai TypeError: date.toUTCString is not a function, poiché Date.UTC() restituisce un intero in millisecondi, non un’istanza di date.
Cosa includerà l’output?
const d = Date.UTC(2020, 0, 1)console.log(d)Il metodo helper Date.UTC non restituisce un’istanza di data. Restituisce un intero che rappresenta i millisecondi.
Quale sarà l’output incluso?
// Assume local TZ is -07:00const d = new Date(Date.UTC(2020, 0, 1))console.log(d.getTimezoneOffset())Le istanze di Date verranno presentate implicitamente nell’ora locale, con un valore di .getTimezoneOffset() (effettivamente) invariato.
Le istanze di Date non memorizzano i dati sul fuso orario. Memorizzano il numero di millisecondi trascorsi dall’epoca Unix (1 gennaio 1970). Il fuso orario viene preso in considerazione durante il parsing e il rendering delle stringhe di data. Il comportamento di visualizzazione predefinito è determinato automaticamente in base alle impostazioni locali del sistema o del browser.
Quale sarà l’output?
const d = new Date(2020, 0, 1)d.setDate(1)console.log(d)Il metodo .setDate() imposta il giorno del mese, in base al mese corrente dell’istanza fornita.
Se viene fornito un valore al di fuori del numero di giorni disponibili, il valore del mese dell’istanza della data verrà regolato (ad esempio, un setDate(32) a gennaio verrà calcolato come 1° febbraio).
Quale sarà l’output?
const d = new Date(2020, 0, 1)d.setMonth(1)console.log(d)Il metodo .setMonth() imposta il mese per l’istanza di una data specifica.
L’argomento del mese è basato su zero, con un intervallo da 0 a 11 (utilizzando i calendari occidentali).
Cosa includerà l’output?
const d = new Date(2020, 0, 1)d.setMonth(12)console.log(d)Il metodo .setMonth() imposta il mese per una specifica istanza di data.
L’argomento month è basato su zero, con 12 valori nell’intervallo 0-11 (utilizzando il calendario occidentale).
In questo caso vediamo che l’anno viene aggiornato al 2021, perché setMonth(12) è di un’unità superiore a 11 (Dicembre).
Cosa includerà l’output?
const d = new Date(2020, 0, 1)d.setMonth(13)console.log(d)Il metodo .setMonth() imposta il mese per l’istanza di una data specifica.
L’argomento del mese è basato su zero, con un intervallo da 0 a 11 (utilizzando i calendari occidentali).
Qui vediamo che il mese e l’anno vengono regolati a Febbraio 2021, perché setMonth(13) è superiore di 2 rispetto a 11 (Dicembre).
Cosa includerà l’output?
const d = new Date(2020, 0, 1)d.setMonth(-1)console.log(d)Il metodo .setMonth() imposta il mese per la data istanziata.
L’argomento del mese è basato su zero, con un intervallo 0-11 (usando il calendario occidentale).
Qui vediamo che il mese e l’anno tornano a dicembre 2019, perché setMonth(-1) è inferiore a 0 (Gennaio).