alert(new Date('2010-11-29'));
chrome, ff tidak memiliki masalah dengan ini, tetapi safari berteriak "tanggal tidak valid". Mengapa
sunting: ok, sesuai komentar di bawah, saya menggunakan parsing string dan mencoba ini:
alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari
sunting 22 Maret 2018 : Sepertinya orang masih mendarat di sini - Hari ini, saya akan menggunakan moment
atau date-fns
selesai dengan itu. Date-fns juga bebas rasa sakit dan ringan.
javascript
date
safari
Shrinath
sumber
sumber
Jawaban:
Pola
yyyy-MM-dd
ini bukan format yang didukung secara resmi untukDate
konstruktor. Firefox tampaknya mendukungnya, tetapi jangan mengandalkan browser lain yang melakukan hal yang sama.Berikut adalah beberapa string yang didukung:
DateJS tampaknya seperti pustaka yang bagus untuk mem -parsing format tanggal yang tidak standar.
Sunting : baru saja memeriksa ECMA-262 standar . Mengutip dari bagian 15.9.1.15:
Format String Waktu Tanggal
Jadi, sepertinya YYYY-MM-DD termasuk dalam standar, tetapi untuk beberapa alasan, Safari tidak mendukungnya.
Pembaruan : setelah melihat dokumentasi datejs , menggunakannya, masalah Anda harus diselesaikan menggunakan kode seperti ini:
sumber
Bagi saya menerapkan perpustakaan baru hanya karena Safari tidak dapat melakukannya dengan benar terlalu banyak dan regex berlebihan. Inilah oneliner :
sumber
Saya menghadapi masalah yang sama.
Date.Parse("DATESTRING")
sedang mengerjakan Chrome (Versi 59.0.3071.115) tetapi tidak untuk Safari (Versi 10.1.1 (11603.2.5))Safari:
Chrome:
Solusi yang berhasil untuk saya adalah mengganti ruang di dateString dengan
"T"
. (contohdateString.replace(/ /g,"T")
:)Safari:
Chrome:
Perhatikan bahwa respons dari browser Safari adalah 8 jam (28800000 ms) kurang dari respons yang terlihat di browser Chrome karena Safari mengembalikan respons di TZ lokal (yang 8 jam di belakang UTC)
Untuk mendapatkan kedua waktu di TZ yang sama
Safari:
Chrome:
sumber
new Date(year, month, date, hours, minutes, seconds, milliseconds)
konstruktor. Parsing tanggal string ke array komponennya untuk menggunakan komponen-komponen itu di konstruktor. @nizantz akan lebih bagus jika Anda berpikir contoh seperti itu dapat ditambahkan ke jawaban Anda.dateString.replace(/ /g,"T")
Baris kode ajaib ini berhasil membentuk saya. :)Saya menggunakan momen untuk memecahkan masalah. Sebagai contoh
sumber
Untuk mendapatkan solusi yang berfungsi pada sebagian besar browser, Anda harus membuat objek-tanggal Anda dengan format ini
misalnya:
berfungsi baik dengan IE, FF, Chrome dan Safari. Bahkan versi yang lebih lama.
IE Dev Center: Obyek Tanggal (JavaScript)
Jaringan Pengembang Mozilla: Tanggal
sumber
convert string to Date fromat (Anda harus tahu zona waktu server)
di mana +08: 00 = timeZone dari server
sumber
Saya memiliki masalah yang sama. Kemudian saya menggunakan moment.Js. Masalah telah menghilang.
misalnya
sumber
Meskipun Anda mungkin berharap bahwa browser akan mendukung ISO 8601 (atau himpunan-himpunan tanggal saja), ini bukan masalahnya. Semua browser yang saya tahu (setidaknya di AS / Inggris yang saya gunakan) dapat mem-parsing
MM/DD/YYYY
format AS yang mengerikan .Jika Anda sudah memiliki bagian-bagian tanggal, Anda mungkin ingin mencoba menggunakan Date.UTC () . Jika tidak, tetapi Anda harus menggunakan
YYYY-MM-DD
format, saya sarankan menggunakan ekspresi reguler untuk mengurai potongan yang Anda tahu dan kemudian meneruskannyaDate.UTC()
.sumber
Gunakan format di bawah ini, itu akan berfungsi pada semua browser
// Output Anda akan terlihat seperti ini "Rab 23 Mar 2016 00:00:00 GMT + 0530 (IST)"
// Perhatikan ini akan berada di zona waktu saat ini dalam hal ini dilambangkan oleh IST, untuk dikonversi ke zona waktu UTC yang dapat Anda sertakan
// Keluaran Anda sekarang akan seperti ini "Sel, 22 Mar 2016 18:30:00 GMT"
Perhatikan bahwa sekarang dateObj menunjukkan waktu dalam format GMT, juga perhatikan bahwa tanggal dan waktu telah diubah secara bersamaan.
Fungsi "toUTCSting" mengambil waktu yang sesuai di meridian Greenwich. Ini dicapai dengan menetapkan perbedaan waktu antara zona waktu Anda saat ini dengan zona waktu Greenwich Meridian.
Dalam kasus di atas waktu sebelum konversi adalah 00:00 jam dan menit pada tanggal 23 Maret di tahun 2016. Dan setelah konversi dari GMT + 0530 (IST) jam ke GMT (pada dasarnya mengurangi 5,30 jam dari cap waktu yang diberikan dalam kasus) waktu mencerminkan 18,30 jam pada tanggal 22 Maret di tahun 2016 (tepatnya 5,30 jam di belakang pertama kali).
Selanjutnya untuk mengkonversi objek tanggal ke cap waktu yang dapat Anda gunakan
// output akan terlihat mirip dengan "1458671400000" ini
Ini akan memberi Anda cap waktu yang unik saat itu
sumber
Bagaimana dengan pembajakan
Date
dengan fix-date ? Tidak ada dependensi, min + gzip = 280 Bsumber
Cara terbaik untuk melakukannya adalah dengan menggunakan format berikut:
Ini didukung di semua browser dan tidak akan memberi Anda masalah. Harap dicatat bahwa bulan ditulis dari 0 hingga 11.
sumber
Masalah yang sama dihadapi di Safari dan diselesaikan dengan memasukkan ini ke halaman web
Semoga ini akan berhasil juga untuk Anda
Terima kasih
sumber
Seperti @nizantz disebutkan sebelumnya, menggunakan Date.parse () tidak berfungsi untuk saya di Safari. Setelah sedikit riset, saya mengetahui bahwa properti LastDateModified untuk objek File telah ditinggalkan, dan tidak lagi didukung oleh Safari. Menggunakan properti LastModified dari objek File menyelesaikan masalah saya. Tentu tidak suka ketika info buruk ditemukan online.
Terima kasih kepada semua yang berkontribusi pada posting ini yang telah membantu saya dalam menempuh jalan yang saya butuhkan untuk belajar tentang masalah saya. Kalau bukan karena info ini, saya tidak akan pernah mungkin menemukan masalah root saya. Mungkin ini akan membantu orang lain dalam situasi serupa saya.
sumber
Saya juga menghadapi masalah yang sama di Safari Browser
Di sini solusinya:
sumber
Ini bukan solusi terbaik, walaupun saya hanya menangkap kesalahan dan mengirim kembali tanggal saat ini. Saya pribadi merasa tidak menyelesaikan masalah Safari, jika pengguna ingin menggunakan browser yang tidak memenuhi standar sh * t - mereka harus hidup dengan kebiasaan.
Saya sarankan agar backend Anda mengirim tanggal ISO.
sumber
gunakan format 'mm / hh / tttt'. Misalnya: - Tanggal baru ('02 / 28/2015 '). Ini bekerja dengan baik di semua browser.
sumber