Mengapa javascript ini mengembalikan 108, bukan 2008? hari dan bulannya benar, tetapi tahunnya tidak?
myDate = new Date();
year = myDate.getYear();
tahun = 108?
javascript
date
ctrlShiftBryan
sumber
sumber
year = myDate.getFullYear() % 100;
Jawaban:
Ini adalah masalah Y2K , hanya tahun sejak 1900 yang dihitung.
Ada potensi masalah kompatibilitas sekarang yang
getYear()
sudah tidak digunakan lagi dan mendukunggetFullYear()
- dari quirksmode :Ada juga perbedaan implementasi antara Internet Explorer dan Firefox, karena implementasi IE
getYear()
diubah menjadi sepertigetFullYear()
- dari IBM :sumber
Karena getFullYear tidak berfungsi di browser lama, Anda dapat menggunakan sesuatu seperti ini:
Prototipe JavaScript dapat digunakan untuk memperluas objek yang ada, seperti metode ekstensi C #. Sekarang, kita bisa melakukan ini;
sumber
Periksa dokumennya. Ini bukan masalah Y2K - ini bukan masalah Y2K! Keputusan ini awalnya dibuat dalam C dan disalin ke Perl, tampaknya JavaScript, dan mungkin beberapa bahasa lain. Dahulu kala itu tampaknya masih diinginkan untuk menggunakan tahun dua digit, tetapi luar biasa siapa pun yang merancang antarmuka itu memiliki cukup pemikiran untuk menyadari bahwa mereka perlu memikirkan tentang apa yang akan terjadi pada tahun 2000 dan seterusnya, jadi daripada hanya memberikan dua terakhir digit, mereka memberikan jumlah tahun sejak 1900. Anda bisa menggunakan dua digit, jika Anda sedang terburu-buru atau ingin mengambil risiko. Atau jika Anda ingin program Anda terus berjalan, Anda dapat menambahkan 100 ke hasilnya dan menggunakan tahun empat digit penuh.
Saya ingat pertama kali saya melakukan manipulasi tanggal di Perl. Anehnya saya membaca dokumentasinya . Ternyata hal tersebut bukanlah hal yang biasa. Satu atau dua tahun kemudian saya dipanggil ke kantor pada tanggal 31 Desember 1999 untuk memperbaiki bug yang telah ditemukan pada menit terakhir dalam beberapa kode Perl kontrak, hal-hal yang tidak pernah ada hubungannya dengan saya. Masalahnya persis seperti ini: panggilan tanggal standar menghasilkan tahun sejak 1900, dan pemrogram memperlakukannya sebagai tahun dua digit. (Mereka berasumsi bahwa mereka akan mendapatkan "00" pada tahun 2000.) Sebagai programmer muda yang tidak berpengalaman, saya heran bahwa kami telah membayar begitu banyak ekstra untuk pekerjaan "profesional", dan orang-orang itu bahkan tidak mau repot-repot membaca dokumentasi. Itu adalah awal dari kekecewaan selama bertahun-tahun; sekarang aku sudah tua dan sinis. :)
Pada tahun 2000, konferensi Perl YAPC tahunan disebut sebagai "YAPC 19100" untuk menghormati non-bug yang sering dilaporkan ini.
Saat ini, setidaknya di dunia Perl, lebih masuk akal untuk menggunakan modul standar untuk penanganan tanggal, yang menggunakan tahun empat digit yang sebenarnya. Tidak yakin apa yang mungkin tersedia untuk JavaScript.
sumber
Ini harus mengembalikan jumlah tahun sejak tahun 1900.
sumber
menggunakan
date.getFullYear()
.Ini (seperti yang ditunjukkan dengan benar di tempat lain) adalah hal Y2K. Netscape (ditulis sebelum 2000) aslinya dikembalikan, misalnya
98
darigetYear()
. Daripada kembali ke00
, itu malah dikembalikan100
untuk tahun 2000. Kemudian browser lain datang dan melakukannya secara berbeda, dan semua orang tidak senang karena ketidakcocokan memerintah.Kemudian browser didukung
getFullYear
sebagai metode standar untuk mengembalikan tahun lengkap.sumber
Pertanyaan ini sangat kuno sehingga membuat saya menangis dengan nostalgia akan hari-hari dotcom!
Benar, Date.getYear () mengembalikan jumlah tahun sejak 1900, seperti Perl's localtime (). Orang bertanya-tanya mengapa bahasa yang dirancang pada tahun 1990-an tidak memperhitungkan pergantian abad, tetapi apa yang bisa saya katakan? Anda harus berada di sana. Ini agak masuk akal pada saat itu (seperti pets.com lakukan).
Sebelum tahun 2000, seseorang mungkin tergoda untuk memperbaiki bug ini dengan menambahkan "19" ke hasil getYear () yang menghasilkan "bug tahun 19100" . Orang lain telah menjawab pertanyaan ini dengan cukup (tambahkan 1900 ke hasil getDate ()).
Mungkin buku yang Anda baca tentang JavaScript agak tua?
Terima kasih atas ledakan di masa lalu!
sumber
Anda harus, seperti yang ditunjukkan, jangan pernah menggunakan
getYear()
, melainkan gunakangetFullYear()
.Namun, ceritanya tidak sesederhana "IE mengimplementasikan
GetYear()
sepertigetFullYear()
. Opera dan IE saat ini memperlakukangetYear()
sepertigetYear()
yang semula ditentukan untuk tanggal sebelum tahun 2000, tetapi akan memperlakukannya sebagaigetFullYear()
untuk tanggal setelah 2000, sementara webkit dan Firefox tetap dengan perilaku lamaIni menghasilkan 99 di semua browser:
Ini menghasilkan 108 di FF / WebKit, dan 2008 di Opera / IE:
sumber
Itu bodoh. Itu tanggal ke hari sebelum Y2K , dan sekarang hanya mengembalikan jumlah tahun sejak 1900 untuk alasan warisan. Gunakan getFullYear () untuk mendapatkan tahun sebenarnya.
sumber
Saya menggunakan
date.getUTCFullYear()
; bekerja tanpa masalah.sumber
Angka yang Anda dapatkan adalah jumlah tahun sejak 1900. Jangan tanya kenapa ..
sumber
Seperti orang lain berkata, itu mengembalikan jumlah tahun sejak tahun 1900. Alasan mengapa hal itu adalah bahwa ketika JavaScript diciptakan pada pertengahan 90-an, perilaku yang baik nyaman dan konsisten dengan API tanggal-waktu dalam bahasa lain. Khususnya C. Dan, tentu saja, setelah API dibuat, mereka tidak dapat mengubahnya karena alasan kompatibilitas ke belakang.
sumber
BTW, browser yang berbeda mungkin memberikan hasil yang berbeda, jadi lebih baik lewati fungsi ini sama sekali dan dan gunakan getFullYear () selalu.
sumber
var date_object = Tanggal baru (); var year = date_object.getYear (); if (tahun <2000) {year = year + 1900; } // kamu akan mendapatkan setahun penuh ....
sumber
itu kembali 4 digit tahun - 1900, yang mungkin dingin 9+ tahun yang lalu, tapi cukup terbelakang sekarang. Java.util.Date dari Java juga melakukan ini.
sumber