2015-04-17 10 views
18

testi:Tarih kurucusunda fark nasıl açıklanır?

var d1 = new Date("2000-04-22T00:00:00+00:00"); 
var d2 = new Date(2000, 4, 22, 0, 0, 0, 0); 
console.log("d1 = " + d1.getTime()); 
console.log("d2 = " + d2.getTime()); 

sonucu:

d1 = 956361600000 
d2 = 958946400000 

ben fark saat dilimleri geldiğini düşünüyorlar, ama ben bunu hiç anlamıyorum!

Bu fark hangi büyülü şeyleri üretir?

+2

çünkü Zaman Dilimi – epascarello

+2

Kullanım 'yeni tarihi (Date.UTC (2000, 4 olacağını Yani, 22, 0, 0, 0, 0)) 'beklenen sonucu elde etmek. – Bergi

+0

UTC sorununu çözen, doğru ay indeksi ile 'yeni tarih (Date.UTC (2000, 3, 22, 0, 0, 0, 0)) olur ve çalışır! –

cevap

12

En büyük sorun, Javascript'te aylar 0 olacak, ikinci tarih örneğinizi oluştururken, 4 Mayıs anlamına gelir. Ayrıca, dizenizde saat dilimi için UTC/GMT olan +00: 00 bulunur. İkinciniz zaman dilimi bilgisi sağlamaz, bu yüzden yerel saat dilimi olacaktır.

Bir UTC tarih vardı şekline benzer inşa isterseniz arayabilirsiniz:

var d2 = new Date(Date.UTC(2000, 3, 22, 0, 0, 0, 0)); 
+0

'UTC' bir kurucu değil – Bergi

+0

Teşekkürler, sabit, Tarihte kaydırmayı unuttum. – JBzd

19

ISO tarih dizginiz bir UTC saat dilimini içerir, bu nedenle UTC olarak yorumlanır. İkinci tarih, tarih bölümleri için sayısal parametrelerle oluşturulur ve bir Tarih oluşturmanın anlamı, yerel saat dilimini dolaylı olarak kullanır.

Ayrıca, tarih dizesindeki "4" öğesinin "Nisan" anlamına geldiğini, ikinci yapıcıdaki "4" öğesinin "May" anlamına geldiğini unutmayın: sayısal yapıcı kullanıldığında, aylar sıfırdan başlayarak değil, bir değil numaralandırılır.

+1

Tekrar görüştük, ve hala * harikasın. –

4

bu described in the documentation iyi olduğunu düşünüyorum:

Not: Tarih birden fazla bağımsız değişkenle yapıcı olarak adlandırılan, specifed argümanlar yerel saati temsil eder. UTC isteniyorsa, aynı argümanlarla yeni Tarih (Date.UTC (...)) kullanın.

Başka bir deyişle, dize yapıcısını kullandığınızda, UTC alırsınız. Kurucu kullanarak bir tane oluşturduğunuzda, normal yerel ayarınızı alırsınız.

İlgili konular