2010-07-08 11 views
6

Così stavo guardando come avrei potuto visualizzare un messaggio sul desktop utilizzando le estensioni di Google Chrome, quando mi sono imbattuto in queste righe di codice:In che modo questa istruzione JavaScript calcola la data?

var time = /(..)(:..)/(Date());    // The prettyprinted time. 
var hour = time[1] % 12 || 12;    // The prettyprinted hour. 
var period = time[1] < 12 ? 'a.m.' : 'p.m.'; // The period of the day. 

Che diamine significa tutto questo fare?

+0

se si sta facendo estensioni di Chrome check out http://area51.stackexchange.com/proposals/10910/google-chrome-extensions-webstore?referrer=SDGU8262nOKdp17Pr161Vw2 – Lizard

risposta

9

Affascinante, non ho visto questo prima:

/regex/(...); 

EDIT: see this!

questo:

/(..)(:..)/(Date()); 
// seems to emulate the functionality of exec() 

restituirà la partita (array di gruppi abbinati) dell'espressione regolare, /(..)(:..)/, contro la stringa (Date()):

"Thu Jul 08 2010 09:40:38 GMT+0200 (W. Europe Daylight Time)" 

(o qualunque tempo succede)

L'array restituito (la corrispondenza), in th è caso, è:

["09:40", "09", ":40"] 

Questa riga:

var hour = time[1] % 12 || 12; 

... determina semplicemente l'ora. Se l'ora è falsey (ad esempio 0), il valore predefinito è 12 - ciò consente alla prossima istruzione di restituire il suffisso am/pm corretto. (12:00 è am).

+1

Si potrebbe effettivamente ridurre il codice di cui sopra, sostituendo la prima linea con 'var hour =/(..) (: ..)/(Date()) [1];' e quindi si riferisce semplicemente a 'hour' invece di' time [1] '. –

1

La prima riga utilizza un'espressione regolare per estrarre l'elemento tempo dalla stringa restituita da Date(). Ad esempio, questo potrebbe essere '08: 37 'Le parentesi in questa espressione regolare danno due diversi' gruppi 'di caratteri, il primo gruppo che corrisponde' 08 ', il secondo corrispondente' 37 '

La seconda linea sta prendendo il primo set di caratteri, che verrà automaticamente convertito in un numero e ottenendo il resto della divisione per 12. Presumibilmente per trasformare un numero di orologio di 24 ore in un numero di orologio di 12 ore. '|| 12 'agisce per restituire 12 solo nel caso in cui il resto sia 0.

La terza riga utilizza un operatore condizionale ternario per aggiungere "a.m" nel caso in cui l'ora sia inferiore a 12, altrimenti "p.m."

Problemi correlati