Bu javascript neden 2008 yerine 108 döndürüyor? gün ve ayı doğru alıyor ama yılı değil
myDate = new Date();
year = myDate.getYear();
yıl = 108?
Bu javascript neden 2008 yerine 108 döndürüyor? gün ve ayı doğru alıyor ama yılı değil
myDate = new Date();
year = myDate.getYear();
yıl = 108?
year = myDate.getFullYear() % 100;
Yanıtlar:
Bu bir Y2K meselesi, sadece 1900'den sonraki yıllar sayılıyor.
Artık tuhaf moddan - getYear()
lehine kullanımdan kaldırılan olası uyumluluk sorunları var :getFullYear()
Konuyu daha da karmaşık hale getirmek için, date.getYear () günümüzde kullanımdan kaldırılmıştır ve bunun karşılığında eski tarayıcılar tarafından desteklenmeyen date.getFullYear () kullanmanız gerekir. Ancak çalışırsa, her zaman tam yılı vermelidir, yani. 100 yerine 2000.
Tarayıcınız aşağıdaki iki yöntemi kullanarak aşağıdaki yılları verir:
* The year according to getYear(): 108
* The year according to getFullYear(): 2008
Arasında IE uygulaması olarak Internet Explorer ve Firefox arasındaki uygulama farklılıkları da vardır getYear()
değiştirildi gibi davranmaya getFullYear()
- dan IBM :
ECMAScript belirtimine göre, getYear, başlangıçta 1998 için "98" döndürmesi amaçlanan eksi 1900 yılını döndürür. GetYear, ECMAScript Sürüm 3'te kullanımdan kaldırılmış ve getFullYear () ile değiştirilmiştir.
Internet Explorer getYear () öğesini getFullYear () gibi çalışacak şekilde değiştirdi ve onu Y2k uyumlu hale getirirken Mozilla standart davranışı korudu.
GetFullYear eski tarayıcılarda çalışmadığından, şunun gibi bir şey kullanabilirsiniz:
Date.prototype.getRealYear = function()
{
if(this.getFullYear)
return this.getFullYear();
else
return this.getYear() + 1900;
};
Javascript prototipi, C # uzantı yöntemleri gibi, var olan nesneleri genişletmek için kullanılabilir. Şimdi bunu yapabiliriz;
var myDate = new Date();
myDate.getRealYear();
// Outputs 2008
Belgeleri kontrol edin. Bu bir Y2K sorunu değil - Y2K sorununun olmaması! Bu karar ilk olarak C'de verildi ve Perl'e, görünüşe göre JavaScript'e ve muhtemelen birkaç başka dile kopyalandı. Uzun zaman önce, görünüşe göre iki basamaklı yılları kullanmak hala arzu edilir bir durumdu, ancak dikkat çekici bir şekilde, bu arayüzü tasarlayan her kimse, 2000 yılı ve sonrasında ne olacağını düşünmek zorunda olduklarını fark edecek kadar önceden düşünmüştü, bu yüzden sadece son ikisini sağlamak yerine rakamlar, 1900'den beri geçen yılların sayısını veriyorlardı. Aceleniz varsa veya riskli olmak istiyorsanız, iki rakamı kullanabilirsiniz. Veya programınızın çalışmaya devam etmesini istiyorsanız, sonuca 100 ekleyebilir ve tam teşekküllü dört basamaklı yılları kullanabilirsiniz.
Perl'de ilk randevu manipülasyonu yaptığım zamanı hatırlıyorum. Garip bir şekilde belgeleri okudum . Görünüşe göre bu sıradan bir şey değil. Bir ya da iki yıl sonra, 31 Aralık 1999'da, olası son dakikada bazı sözleşmeli Perl kodlarında keşfedilen bir hatayı düzeltmek için ofise çağrıldım, hiç yapmadığım şeyler. İşte tam da bu konuydu: Standart tarih çağrısı 1900'den beri yılları döndürdü ve programcılar bunu iki basamaklı bir yıl olarak ele aldı. (2000 yılında "00" alacaklarını varsaydılar.) Deneyimsiz genç bir programcı olarak, "profesyonel" bir iş için çok fazla para ödediğimiz ve bu insanların okumaya bile zahmet etmedikleri aklımı uçurdu. belgeler. Yıllarca süren hayal kırıklığının başlangıcıydı; şimdi yaşlı ve alaycıyım. :)
2000 yılında, yıllık YAPC Perl konferansı, sık sık bildirilen bu hata nedeniyle "YAPC 19100" olarak anıldı.
Günümüzde, en azından Perl dünyasında, tarih işleme için gerçek dört basamaklı yılları kullanan standart bir modül kullanmak daha mantıklı. JavaScript için nelerin mevcut olabileceğinden emin değilim.
1900 yılından bu yana geçen yılların sayısını döndürmelidir.
kullanın date.getFullYear()
.
Bu (başka bir yerde doğru bir şekilde belirtildiği gibi) bir Y2K şeyidir. Netscape (2000'den önce yazılmış) aslen örneğin döndü 98
dan getYear()
. Geri dönmek 00
yerine 100
, 2000 yılı için geri döndü . Sonra diğer tarayıcılar geldi ve bunu farklı şekilde yaptı ve uyumsuzluk hüküm sürdüğü için herkes mutsuzdu.
Daha sonraki tarayıcılar getFullYear
, yılın tamamını döndürmek için standart bir yöntem olarak desteklenir .
Bu soru o kadar eski ki dotcom günleri için beni nostaljiyle ağlatıyor!
Doğru, Date.getYear (), Perl'in localtime () gibi, 1900'den beri geçen yılların sayısını döndürür. 1990'larda tasarlanan bir dilin neden yüzyılın cirosunu hesaba katmayacağını merak ediyor insan ama ne diyebilirim? Orada olmak zorundaydın. O zamanlar bir tür mantıklıydı (evcil hayvanlar.com'un yaptığı gibi).
2000'den önce, getYear () sonucuna "19" ekleyerek bu hatayı düzeltmek için "19100 yılı hatası" ortaya çıktı . Diğerleri bu soruyu zaten yeterince yanıtlamışlardır (getDate () sonucuna 1900 ekleyin).
Belki JavaScript hakkında okuduğunuz kitap biraz eski?
Geçmişten gelen patlama için teşekkürler!
Belirtildiği gibi, asla kullanmamalı getYear()
, bunun yerine kullanmalısınız getFullYear()
.
Hikaye IE uygular" olarak basit olarak ancak değil GetYear()
olarak getFullYear()
tedavi etmek bugünlerde. Opera ve IE getYear()
olarak getYear()
başlangıçta 2000 öncesindeki tarihler için belirtilmiş, ancak olarak algılar getFullYear()
ise, 2000 sonrası tarihlerde eski davranışına sahip webkit ve Firefox sopa
Bu, tüm tarayıcılarda 99 çıktı:
javascript:alert(new Date(917823600000).getYear());
Bu, FF / WebKit'te 108 ve Opera / IE'de 2008 çıktı:
javascript:alert(new Date().getYear());
Aptalca. Bu gün -Y2K öncesi büyük ve şimdi sadece eski nedenlerle 1900 yılından bu yana yıl sayısını döndürür. Gerçek yılı elde etmek için getFullYear () kullanın.
Aldığınız sayı 1900'den beri geçen yılların sayısı. Neden diye sorma ..
Diğerlerinin söylediği gibi, 1900'den bu yana geçen yılların sayısını döndürür. Bunu yapmasının nedeni , JavaScript 90'ların ortalarında icat edildiğinde, bu davranışın hem uygun hem de diğer dillerdeki tarih-saat API'leriyle tutarlı olmasıdır. Özellikle C. Ve tabii ki, API bir kez kurulduktan sonra, geriye dönük uyumluluk nedeniyle onu değiştiremediler.
BTW, farklı tarayıcılar farklı sonuçlar döndürebilir, bu nedenle bu işlevi tamamen atlamak ve her zaman getFullYear () kullanmak daha iyidir.
var date_object = new Date (); var year = date_object.getYear (); eğer (yıl <2000) {year = year + 1900; } // tüm yılı alacaksınız ....