2009-10-20 18 views
6

İşte bir soru. Saat değişikliği için Kuzey Amerika * daki kurallar şunlardır:JavaScript - Bir sonraki zaman değişikliğinin tarihini (Standart veya Günışığı) bul

  • ilk Pazar günü Kasım yılında, Mart yılında Standardı (-1 saat)
  • ikinci Pazar değişiklikleri ofset (Gün Işığı değişiklikleri ofset GMT'den normal ofset)

Bir Date parametresini alan bir JavaScript düşünün ve argümanın Standart mı, Yaz Saati mi olduğunu belirleyin.

soru köküdür:

  • nasıl bir dahaki sefere değişikliğin tarihini inşa edecek?

algoritması/yalancı kod şu anda şöyle görünür: Burada

 
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 
    } 

} 

kısıt standart JavaScript işlevini kullanın ve Tarih nesnesinin herhangi bir JavaScript motorunun ayrıştırmayı kazımak getirmemektir. Bu kod bir tarayıcıda yayınlanmayacaktır, bu yüzden bu güzel çözümler geçerli olmaz.

** değil tüm yerler/Kuzey Amerika değişim zamanlarında bölgeler. *

cevap

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) Ben farklı ülkelerde diğer bazı kurallar olabilir bekliyoruz. Bazıları gün ışığından yararlanma yok. Bu nedenle, belirli bir yerel ayardaki cevabı bulmak için, muhtemelen, getTimetoneOffset()'un değerinin değiştiği günleri bulmak için 365 (6) gün içinde döngü yapabilirsiniz. Bu, performansta büyük bir gecikme olmamalıdır.

2) Ardından, saat değiştiğinde belirli bir saati alabilirsiniz (ABD için 2 am?). Ok, someone has already done the job =): 24 saat


PS düşünce başka bir döngü sonuçları. Kullanmadan önce test etmelisiniz (test etmediğim için)

PPS: İlk sorunuz idi "gün ışığı uygulanmış mı, yoksa belirli bir tarih için değil mi?". This answer solves the task

İlgili konular