2009-10-20 13 views
6

Ecco una domanda tempestiva. Le regole in America del Nord * per il cambiamento di tempo sono:JavaScript - trova la data della prossima modifica (Standard o Daylight)

  • il prima Domenica di novembre, compensato modifiche a standard (-1 ora)
  • il seconda Domenica di marzo, compensato modifiche alla luce del giorno (l'offset normale da GMT)

Prendere in considerazione una funzione in JavaScript che accetta un parametro Date e deve determinare se l'argomento è Standard o Daylight Saving.

La radice della questione è:

  • come è possibile costruire la data del prossimo cambio di orario?

L'algoritmo/pseudocodice attualmente si presenta così:

 
if argDate == "March" 
{ 

    var firstOfMonth = new Date(); 
    firstOfMonth.setFullYear(year,3,1); 

    //the day of week (0=Sunday, 6 = Saturday) 
    var firstOfMonthDayOfWeek = firstOfMonth.getDay(); 

    var firstSunday; 

    if (firstOfMonthDayOfWeek != 0) //Sunday! 
    { 
     //need to find a way to determine which date is the second Sunday 
    } 

} 

Il vincolo è quello di utilizzare la funzione JavaScript standard, e non raschiare l'analisi di qualsiasi motore JavaScript dell'oggetto Date. Questo codice non verrà eseguito in un browser, quindi quelle belle soluzioni non potrebbero essere applicate.

** Non tutti i luoghi/regioni in tempi di cambio America del Nord. *

risposta

1
if argDate == "March" 
{ 

    var firstOfMonth = new Date(); 
    firstOfMonth.setFullYear(year,3,1); 

    //the day of week (0=Sunday, 6 = Saturday) 
    var firstOfMonthDayOfWeek = firstOfMonth.getDay(); 

    var daysUntilFirstSunday = (7-firstOfMonthDayOfWeek) % 7; 

    var firstSunday = firstOfMonth.getDate() + daysUntilFirstSunday; 

    // first Sunday now holds the desired day of the month 
} 
0

1) Mi aspetto che ci potrebbero essere alcune altre regole in diversi paesi. Alcuni non hanno l'ora legale affatto. Quindi, per trovare la risposta in un locale specifico, è probabile che sia possibile passare in rassegna i 365 (6) giorni per trovare i giorni in cui lo getTimetoneOffset() cambia il suo valore. Questo non dovrebbe essere un grande ritardo nelle prestazioni.

2) Quindi, è possibile ottenere l'ora specifica quando l'ora è cambiata (2 am per US?). Suggerire un altro ciclo ATTRAVERSO 24 ore


PS: Ok, someone has already done the job =). Dovresti testarlo prima dell'uso (perché non ho provato)

PPS: La tua prima domanda è stata "è applicata alla luce del giorno o non per una data specifica?". This answer solves the task

Problemi correlati