getTimezoneOffset()
JavaScript yöntem olup, tarayıcıda 00:00 saat dilimi ofset dakika sayısını verir. Örneğin, Yaz Saati Uygulamasındaki (DST) America / New_York saat dilimi 300 sayısını döndürür. 300 dakika sıfırdan 5 saat farktır. 300 dakika 60 dakikaya bölünür 5 saattir. Her zaman dilimi sıfır zaman dilimi ile karşılaştırılır, +00: 00 / Etc / GMT / Greenwich zamanı.
MDN Web Belgeleri
Bilmeniz gereken bir sonraki şey, ofsetin gerçek zaman diliminin ters işaretine sahip olmasıdır.
Saat dilimleri hakkında bilgi İnternet Tahsisli Sayılar Kurumu (iana) tarafından sağlanır.
iana zaman dilimleri
İyi biçimlendirilmiş bir Zaman Dilimi tablosu joda.org tarafından sağlanır
joda-time Saat Dilimleri
+00: 00 veya Etc / GMT Greenwich zamanı
Tüm zaman dilimleri +00: 00 / "Etc / GMT" / Greenwich saatinden kaydırılmıştır
Yaz Saati Yaz aylarında her zaman "normal" saatten daha erken bir saattir. Saatlerinizi sonbahar mevsiminde yeniden ayarladınız. (Ne yapacağını hatırlamak için "Geri Çekil" sloganı)
Yani, Amerika / New_York Yaz Saati uygulamasında (kış) normal saatten bir saat önce. Örneğin, yaz aylarında New York'ta öğleden sonra normalde 17:00, şimdi Yaz Saati'nde Amerika / New_York saatidir. "America / New_York" adı, "Uzun Format" zaman dilimi adıdır. ABD'nin doğu kıyısı tipik olarak saat dilimlerini Doğu Standart Saati (EST) olarak adlandırır.
Bugünün saat dilimi ofsetini başka bir tarihin saat dilimi ofseti ile karşılaştırmak istiyorsanız, saat dilimi ofsetinin matematiksel işaretinin (+/- "Pozitif / Negatif") saat diliminin tersi olduğunu bilmeniz gerekir.
Joda.org adresindeki saat dilimi tablosuna bakın ve "America / New_York" için saat dilimini bulun. Standart Ofset'in önünde negatif bir işaret olacaktır.
Dünya kendi ekseni üzerinde saat yönünün tersine döner. Greenwich'teki güneşin doğuşunu izleyen bir kişi, New York'taki birisinin güneşin doğuşunu görmesinden 5 saat önce güneşin doğuşunu görür. ABD'nin Batı Kıyısı'ndaki biri, ABD'nin Doğu Kıyısı'ndaki bir kişi güneşin doğuşunu gördükten sonra güneşin doğuşunu görecek.
Tüm bunları bilmeniz için bir neden var. Böylece, yılın herhangi bir saat diliminde her zaman dilimini test etmenize gerek kalmadan, bazı JavaScript kodlarının DST durumunu doğru alıp almadığını mantıksal olarak belirleyebileceksiniz.
New York'ta Kasım ayının olduğunu ve saatlerin bir saat önce ayarlandığını düşünün. New York'ta yaz aylarında ofset 240 dakika veya 4 saattir.
Temmuz ayında bir tarih oluşturmak ve sonra ofset elde ederek bunu test edebilirsiniz.
var July_Date = new Date(2017, 6, 1);
var july_Timezone_OffSet = July_Date.getTimezoneOffset();
console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet)
Tarayıcının geliştirici araçları konsol günlüğüne ne yazdıracak?
Yanıt: 240
Böylece, Ocak ayında bir tarih oluşturabilir ve tarayıcınızın kış sezonu için bir saat dilimi farkı için ne döndüğünü görebilirsiniz.
var Jan_Date = new Date(2017, 0, 1);//Month is zero indexed - Jan is zero
var jan_Timezone_OffSet = Jan_Date.getTimezoneOffset();
console.log('jan_Timezone_OffSet: ' + jan_Timezone_OffSet)
Yanıt: 300
Açıkçası 300, 240'dan daha büyüktür. Peki, bu ne anlama geliyor? Kış ofsetini yaz ofsetinden daha büyük olan test kodunu yazmalı mısınız? Yoksa yaz mevsimi kış mevsiminden daha az mı? Yaz ve kış saat dilimi ofsetleri arasında bir fark varsa, bu saat dilimi için DST'nin kullanıldığını varsayabilirsiniz. Ancak bu, bugün tarayıcıların saat dilimi için DST kullanıp kullanmadığını söylemez . Bu nedenle, bugün için saat dilimini dengelemeniz gerekir.
var today = new Date();
var todaysTimeZone = today.getTimezoneOffset();
console.log('todaysTimeZone : ' + todaysTimeZone)
Cevap:? - Yılın zamanına bağlı
Bugünün saat dilimi uzaklığı ve yaz saati bölge uzaklığı aynıysa, VE yaz ve kış saat dilimi uzaklıkları farklıysa, o zaman mantıksal kesinti ile, bugün DST'de OLMAMALIDIR.
Yaz ve kış saat dilimi ofsetlerini karşılaştırmayı atlayabilir, (DST'nin bu saat dilimi için kullanılıp kullanılmadığını bilmek) ve sadece bugünün saat dilimi ofsetini yaz TZ ofsetiyle karşılaştırabilir ve her zaman doğru cevabı alabilir misiniz?
today's TZ Offset !== Summer TZ Offset
Peki, bugün kışın mı yaz mı? Bunu biliyorsan, aşağıdaki mantığı uygulayabilirsin:
if ( it_is_winter && ( todays_TZ_Offset !== summer_TZ_Offset) {
var are_We_In_DST = true;
}
Ama sorun şu ki, bugünün tarihinin kış mı yoksa yaz mı olduğunu bilmiyorsunuz. Her saat dilimi, DST'nin ne zaman başlayıp durduğuna ilişkin kendi kurallarına sahip olabilir. Dünyadaki her saat dilimi için her saat diliminin kurallarını izlemeniz gerekir. Yani, daha iyi ve daha kolay bir yol varsa, daha iyi ve daha kolay bir yol da yapabilirsiniz.
Geriye kalan şey, bu saat diliminin DST kullanıp kullanmadığını bilmeniz ve ardından günün saat dilimi ofsetini yaz saati dilimi ofseti ile karşılaştırmanızdır. Bu size her zaman güvenilir bir cevap verecektir.
Son mantık:
if ( DST_Is_Used_In_This_Time_Zone && ( todays_TZ_Offset !== summer_TZ_Offset) {
var are_We_In_DST = true;
}
Tarayıcıdaki saat diliminin DST kullanıp kullanmadığını belirleme işlevi:
function is_DST_Used_In_This_TimeZone() {
var Jan_Date, jan_Timezone_OffSet, July_Date, july_Timezone_OffSet
offsetsNotEqual, thisYear, today;
today = new Date();//Create a date object that is now
thisYear = today.getFullYear();//Get the year as a number
Jan_Date = new Date(thisYear, 0, 1);//Month is zero indexed - Jan is zero
jan_Timezone_OffSet = Jan_Date.getTimezoneOffset();
console.log('jan_Timezone_OffSet: ' + jan_Timezone_OffSet)
July_Date = new Date(thisYear, 6, 1);
july_Timezone_OffSet = July_Date.getTimezoneOffset();
console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet)
offsetsNotEqual = july_Timezone_OffSet !== jan_Timezone_OffSet;//True if not equal
console.log('offsetsNotEqual: ' + offsetsNotEqual);
return offsetsNotEqual;//If the offsets are not equal for summer and
//winter then the only possible reason is that DST is used for
//this time zone
}
getTimezoneOffset
ters değeri döndürdüğündenMath.max
, aslında standart ofseti döndürür . Kod doğrudur.