Saya perhatikan bahwa new Date()
fungsi JavaScript sangat cerdas dalam menerima tanggal dalam beberapa format.
Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")
Saya tidak dapat menemukan dokumentasi di mana pun menampilkan semua format string yang valid saat memanggil new Date()
fungsi.
Ini untuk mengonversi string menjadi tanggal. Jika kita melihat sisi yang berlawanan, yaitu, mengubah objek tanggal ke string, sampai sekarang saya mendapat kesan bahwa JavaScript tidak memiliki API bawaan untuk memformat objek tanggal menjadi string.
Catatan editor: Pendekatan berikut adalah upaya penanya yang bekerja pada browser tertentu tetapi tidak berfungsi secara umum; lihat jawaban di halaman ini untuk melihat beberapa solusi aktual.
Hari ini, saya bermain dengan toString()
metode pada objek tanggal dan mengejutkan itu melayani tujuan memformat tanggal ke string.
var d1 = new Date();
d1.toString('yyyy-MM-dd'); //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy') //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome
Juga di sini saya tidak dapat menemukan dokumentasi tentang semua cara kita dapat memformat objek tanggal menjadi string.
Di mana dokumentasi yang mencantumkan penspesifikasi format yang didukung oleh Date()
objek?
sumber
Jawaban:
Saya suka 10 cara untuk memformat waktu dan tanggal menggunakan JavaScript dan Bekerja dengan Tanggal .
Pada dasarnya, Anda memiliki tiga metode dan Anda harus menggabungkan string untuk diri sendiri:
Contoh:
sumber
Moment.js
Ini adalah (tanggal) JavaScript * perpustakaan tanggal untuk parsing, memanipulasi, dan memformat tanggal.
(*) Makna ringan 9.3KB yang diperkecil + di-gzip dalam pengaturan sekecil mungkin (feb 2014)
sumber
Jika Anda sudah menggunakan jQuery UI di proyek Anda, Anda bisa menggunakan metode datepicker bawaan untuk memformat objek tanggal Anda:
Namun, datepicker hanya memformat tanggal, dan tidak dapat memformat waktu.
Lihatlah datepicker UI formatdate jQuery , contoh-contohnya.
sumber
Saya menemukan ini hari ini dan cukup terkejut bahwa tidak ada yang meluangkan waktu untuk menjawab pertanyaan sederhana ini. Benar, ada banyak perpustakaan di luar sana untuk membantu memanipulasi tanggal. Beberapa lebih baik dari yang lain. Tapi itu bukan pertanyaan yang diajukan.
AFAIK, JavaScript murni tidak mendukung penentu format dengan cara yang Anda tentukan ingin menggunakannya . Tapi itu metode dukungan untuk format tanggal dan / atau waktu, seperti
.toLocaleDateString()
,.toLocaleTimeString()
, dan.toUTCString()
.The
Date
referensi obyek saya paling sering gunakan adalah di situs w3schools.com (tapi cepat pencarian Google akan mengungkapkan banyak lagi yang mungkin lebih memenuhi kebutuhan Anda).Juga perhatikan bahwa bagian Properti Objek Tanggal menyediakan tautan ke
prototype
, yang menggambarkan beberapa cara Anda dapat memperluas objek Tanggal dengan metode khusus. Ada beberapa perdebatan dalam komunitas JavaScript selama bertahun-tahun tentang apakah ini praktik terbaik atau tidak, dan saya tidak mendukung atau menentangnya, hanya menunjukkan keberadaannya.sumber
Fungsi pemformatan khusus:
Untuk format tetap, fungsi sederhana membuat pekerjaan. Contoh berikut menghasilkan format internasional YYYY-MM-DD:
Catatan: Namun, biasanya bukan ide yang baik untuk memperluas perpustakaan standar Javascript (misalnya dengan menambahkan fungsi ini ke prototipe Tanggal).
Fungsi yang lebih maju dapat menghasilkan output yang dapat dikonfigurasi berdasarkan parameter format. Ada beberapa contoh bagus di halaman yang sama ini.
Jika menulis fungsi pemformatan terlalu panjang, ada banyak pustaka yang dapat melakukannya. Beberapa jawaban lain sudah menyebutkannya. Tetapi meningkatnya ketergantungan juga menjadikannya bagian-lawan.
Fungsi pemformatan ECMAScript standar:
Karena versi ECMAscript yang lebih baru,
Date
kelas memiliki beberapa fungsi pemformatan khusus:Catatan: dimungkinkan untuk menghasilkan keluaran khusus dari fungsi pemformatan tersebut:
sumber
Jawaban Singkat
Tidak ada dokumentasi "universal" yang dapat dilayani oleh javascript; setiap browser yang memiliki javascript benar-benar sebuah implementasi. Namun, ada standar yang cenderung diikuti oleh kebanyakan browser modern, dan itulah standar EMCAScript; string standar ECMAScript akan mengambil, minimal, implementasi modifikasi dari definisi ISO 8601.
Selain itu, ada standar kedua yang ditetapkan oleh IETF yang cenderung diikuti peramban, yang merupakan definisi untuk cap waktu yang dibuat dalam RFC 2822. Dokumentasi aktual dapat ditemukan dalam daftar referensi di bagian bawah.
Dari sini Anda dapat mengharapkan fungsionalitas dasar, tetapi apa yang "seharusnya" tidak secara inheren adalah "apa". Aku akan pergi sedikit mendalam dengan ini secara prosedural, karena tampaknya hanya tiga orang yang benar-benar menjawab pertanyaan (Scott, goofballLogic, dan peller yaitu) yang, bagi saya, menyarankan kebanyakan orang tidak menyadari apa yang sebenarnya terjadi ketika Anda buat objek Date.
Jawaban Panjang
Untuk menjawab pertanyaan, atau biasanya mencari jawaban untuk pertanyaan ini, Anda perlu tahu bahwa javascript bukan bahasa novel; ini sebenarnya merupakan implementasi dari ECMAScript, dan mengikuti standar ECMAScript (tapi perlu diketahui, javascript juga sebenarnya sudah meng-pre-date standar-standar tersebut; standar EMCAScript dibangun dari implementasi awal LiveScript / JavaScript). Standar ECMAScript saat ini adalah 5.1 (2011); pada saat pertanyaan awalnya diajukan (Juni '09), standarnya adalah 3 (4 ditinggalkan), tetapi 5 dirilis tidak lama setelah posting pada akhir 2009. Ini harus menguraikan satu masalah; standar apa yang bisa diikuti oleh implementasi javascript, mungkin tidak mencerminkan apa yang sebenarnya ada, karena a) ini merupakan implementasi dari standar yang diberikan, b) tidak semua implementasi standar adalah puritan,
Pada dasarnya, ketika berhadapan dengan javascript, Anda berhadapan dengan turunan (javascript khusus untuk browser) dari suatu implementasi (javascript itu sendiri). Google V8, misalnya, mengimplementasikan ECMAScript 5.0, tetapi Internet Explorer JScript tidak berusaha untuk memenuhi standar ECMAScript, namun Internet Explorer 9 sesuai dengan ECMAScript 5.0.
Ketika satu argumen dilewatkan ke Date () baru, ia melemparkan prototipe fungsi ini:
Ketika dua atau lebih argumen diteruskan ke Date () baru, ia melemparkan prototipe fungsi ini:
Kedua fungsi tersebut seharusnya terlihat familier, tetapi ini tidak segera menjawab pertanyaan Anda dan apa yang dikuantifikasi sebagai "format tanggal" yang dapat diterima memerlukan penjelasan lebih lanjut. Ketika Anda meneruskan string ke Date () baru, itu akan memanggil prototipe (perhatikan bahwa saya menggunakan kata prototipe secara longgar; versi mungkin fungsi individu, atau mungkin menjadi bagian dari pernyataan kondisional dalam fungsi tunggal) untuk Tanggal baru (nilai) dengan string Anda sebagai argumen untuk parameter "nilai". Fungsi ini pertama-tama akan memeriksa apakah itu angka atau string. Dokumentasi untuk fungsi ini dapat ditemukan di sini:
Dari ini, kita dapat menyimpulkan bahwa untuk mendapatkan pemformatan string diizinkan untuk Date (nilai) baru, kita harus melihat metode Date.parse (string). Dokumentasi untuk metode ini dapat ditemukan di sini:
Dan kita dapat lebih jauh menyimpulkan bahwa tanggal diharapkan dalam format diperpanjang ISO 8601 yang dimodifikasi, seperti yang ditentukan di sini:
Namun, kami dapat mengenali dari pengalaman bahwa objek Date javascript menerima format lain (diberlakukan oleh keberadaan pertanyaan ini di tempat pertama), dan ini tidak apa-apa karena ECMAScript memungkinkan untuk mengimplementasikan format spesifik. Namun, itu masih belum menjawab pertanyaan tentang dokumentasi apa yang tersedia pada format yang tersedia, atau format apa yang sebenarnya diperbolehkan. Kita akan melihat implementasi javascript Google, V8; harap dicatat saya tidak menyarankan ini adalah mesin javascript "terbaik" (bagaimana seseorang dapat mendefinisikan "terbaik" atau bahkan "baik") dan orang tidak dapat berasumsi bahwa format yang diperbolehkan dalam V8 mewakili semua format yang tersedia saat ini, tapi saya pikir ini adil untuk menganggap mereka mengikuti harapan modern.
Melihat fungsi DateConstructor, kita dapat menyimpulkan bahwa kita perlu menemukan fungsi DateParse; Namun, perhatikan bahwa "tahun" bukan tahun yang sebenarnya dan hanya referensi ke parameter "tahun".
Ini memanggil% DateParseString, yang sebenarnya merupakan referensi fungsi run-time untuk fungsi C ++. Itu mengacu pada kode berikut:
Panggilan fungsi yang kami perhatikan dalam fungsi ini adalah untuk DateParser :: Parse (); abaikan logika yang mengelilingi panggilan fungsi tersebut, ini hanya pemeriksaan untuk menyesuaikan dengan tipe penyandian (ASCII dan UC16). DateParser :: Parse didefinisikan di sini:
Ini adalah fungsi yang sebenarnya mendefinisikan format apa yang diterimanya. Pada dasarnya, ia memeriksa standar EMCAScript 5.0 ISO 8601 dan jika tidak memenuhi standar, maka ia akan berusaha untuk membangun tanggal berdasarkan format lama. Beberapa poin kunci berdasarkan komentar:
Jadi ini harus cukup untuk memberi Anda ide dasar tentang apa yang diharapkan ketika harus memasukkan string ke objek Date. Anda dapat memperluas ini dengan melihat spesifikasi berikut yang ditunjuk Mozilla di Jaringan Pengembang Mozilla (sesuai dengan cap waktu IETF RFC 2822):
Jaringan Pengembang Microsoft juga menyebutkan standar tambahan untuk objek Tanggal: ECMA-402, Spesifikasi API Internasionalisasi Script ECMAS, yang melengkapi standar ECMAScript 5.1 (dan yang akan datang). Itu dapat ditemukan di sini:
Bagaimanapun, ini harus membantu menyoroti bahwa tidak ada "dokumentasi" yang secara universal mewakili semua implementasi javascript, tetapi masih ada cukup dokumentasi yang tersedia untuk membuat akal yang masuk akal dari string apa yang dapat diterima untuk objek Date. Pertanyaan yang cukup dimuat ketika Anda memikirkannya, ya? : P
sumber
Pastikan Anda checkout Datejs ketika berhadapan dengan tanggal dalam JavaScript. Ini cukup mengesankan dan didokumentasikan dengan baik seperti yang Anda lihat jika ada fungsi toString .
EDIT : Tyler Forsythe menunjukkan, datejs itu sudah ketinggalan zaman. Saya menggunakannya dalam proyek saya saat ini dan tidak memiliki masalah dengan itu, namun Anda harus menyadari hal ini dan mempertimbangkan alternatif.
sumber
Anda bisa memperluas
Date
objek denganformat
metode baru seperti yang dicatat oleh meizz , di bawah ini adalah kode yang diberikan oleh penulis. Dan di sini ada jsfiddle .sumber
console.log(new Date('2014-06-01')) -> May
saya pikir itu ada hubungannya dengan zona waktu: DFungsionalitas yang Anda sebutkan bukan Javascript standar, tidak mungkin portabel di seluruh browser dan karenanya bukan praktik yang baik. The ECMAScript 3 spek daun parse dan output format berfungsi hingga pelaksanaan Javascript. ECMAScript 5 menambahkan subset dukungan ISO8601. Saya percaya fungsi toString () yang Anda sebutkan adalah inovasi dalam satu browser (Mozilla?)
Beberapa perpustakaan menyediakan rutinitas untuk parameter ini, beberapa dengan dukungan lokalisasi yang luas. Anda juga dapat memeriksa metode di dojo.date.locale .
sumber
Saya membuat formatter yang sangat sederhana ini, cut / n / pastable (Diperbarui dengan versi yang lebih rapi):
http://snipplr.com/view/66968.82825/
sumber
new DateFmt()
)Kerangka kerja gratis, terbatas tetapi ringan
sumber
DateJS memang berfitur lengkap, tetapi saya akan merekomendasikan lib yang jauh lebih sederhana ini (Format Tanggal JavaScript) yang saya sukai hanya karena hanya 120 baris atau lebih.
sumber
Setelah memeriksa beberapa opsi yang disediakan dalam jawaban lain, saya memutuskan untuk menulis solusi saya sendiri yang terbatas tetapi sederhana yang mungkin bermanfaat bagi orang lain.
Contoh penggunaan:
sumber
format = format.replace("YY", (""+date.getFullYear()).substring(2));
. Ini semakin jelek - Anda mungkin ingin turun rute RegEx atau sejenisnya.Inilah fungsi yang sering saya gunakan. Hasilnya adalah yyyy-mm-dd jj: mm: ss.nnn.
sumber
Anda mungkin menemukan modifikasi objek tanggal yang bermanfaat ini, yang lebih kecil dari perpustakaan mana pun dan mudah diperluas untuk mendukung format yang berbeda:
CATATAN:
KODE
MENGGUNAKAN
sumber
Hanya untuk melanjutkan jawaban solid gongzhitaao - ini menangani AM / PM
sumber
Saya tidak dapat menemukan dokumentasi definitif tentang format tanggal yang valid, jadi saya menulis tes saya sendiri untuk melihat apa yang didukung di berbagai browser.
http://blarg.co.uk/blog/javascript-date-formats
Hasil saya menyimpulkan bahwa format berikut ini valid di semua browser yang saya uji (contoh menggunakan tanggal "9 Agustus 2013"):
[Tahun Penuh] / [Bulan] / [Nomor tanggal] - Bulan dapat berupa angka dengan atau tanpa nol di depan atau nama bulan dalam format pendek atau panjang, dan nomor tanggal dapat dengan atau tanpa nol di depan.
[Bulan] / [Tahun Penuh] / [Nomor Tanggal] - Bulan dapat berupa angka dengan atau tanpa nol di depan atau nama bulan dalam format pendek atau panjang, dan nomor tanggal dapat dengan atau tanpa nol di depan.
Kombinasi dari [Tahun Penuh], [Nama Bulan] dan [Nomor Tanggal] dipisahkan dengan spasi - Nama bulan dapat dalam format pendek atau panjang, dan nomor tanggal dapat dengan atau tanpa nol di depan.
Juga berlaku di "browser modern" (atau dengan kata lain semua browser kecuali IE9 dan di bawah)
[Tahun Penuh] - [Nomor Bulan] - [Nomor Tanggal] - Bulan dan Nomor Tanggal harus menyertakan angka nol di depan (ini adalah format yang digunakan oleh tipe Tanggal MySQL )
Menggunakan nama bulan:
Menariknya, ketika menggunakan nama bulan saya menemukan bahwa hanya 3 karakter pertama dari nama bulan yang pernah digunakan sehingga semua hal berikut ini benar-benar valid:
sumber
Memformat dan terutama mem-parsing tanggal dalam JavaScript bisa menjadi sedikit sakit kepala. Tidak semua browser menangani tanggal dengan cara yang sama. Jadi, meskipun berguna untuk mengetahui metode dasar, lebih praktis menggunakan perpustakaan pembantu.
The XDate javascript library oleh Adam Shaw telah ada sejak pertengahan 2011 dan masih dalam pengembangan aktif. Ini memiliki dokumentasi yang luar biasa, API yang hebat, pemformatan, mencoba untuk tetap kompatibel dengan mundur dan bahkan mendukung string yang dilokalkan.
Tautan untuk mengubah string lokal: https://gist.github.com/1221376
sumber
Kode contoh:
Keluaran:
sumber
new Date();// = Fri Nov 22 2013 17:48:22 GMT+0100
, output dengan kode di atas adalah"16:48:22"
Library sugar.js memiliki beberapa fungsi hebat untuk bekerja dengan tanggal dalam JavaScript. Dan itu didokumentasikan dengan sangat baik .
Beberapa contoh:
sumber
Semua browser
Cara paling dapat diandalkan untuk memformat tanggal dengan format sumber yang Anda gunakan, adalah menerapkan langkah-langkah berikut:
new Date()
untuk membuatDate
objek.getDate()
,.getMonth()
dan.getFullYear()
untuk mendapatkan masing-masing hari, bulan dan tahunContoh:
(Lihat juga Fiddle ini ).
Hanya peramban modern
Anda juga dapat menggunakan
.toLocaleDateString
metode bawaan untuk melakukan pemformatan untuk Anda. Anda hanya perlu meneruskan lokal yang tepat dan opsi untuk mencocokkan format yang tepat, yang sayangnya hanya didukung oleh browser modern (*) :(Lihat juga Fiddle ini ).
(*) Menurut MDN , "Browser modern" berarti Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ & Safari nightly build
sumber
Hanya pilihan lain, yang saya tulis:
Perpustakaan DP_DateExtensions
Tidak yakin apakah itu akan membantu, tapi saya merasa itu berguna dalam beberapa proyek - sepertinya itu akan melakukan apa yang Anda butuhkan.
Mendukung pemformatan tanggal / waktu, matematika tanggal (menambah / mengurangi bagian tanggal), membandingkan tanggal, penguraian tanggal, dll. Ini bersumber terbuka secara bebas.
Tidak ada alasan untuk mempertimbangkannya jika Anda sudah menggunakan kerangka kerja (mereka semua mampu), tetapi jika Anda hanya perlu dengan cepat menambahkan manipulasi tanggal ke proyek, beri kesempatan.
sumber
Jika Anda hanya ingin menunjukkan waktu dengan dua digit, ini dapat membantu Anda:
sumber
gunakan fungsi ini
lihat tautan di bawah ini untuk detail lebih lanjut https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
sumber
JsSimpleDateFormat adalah pustaka yang dapat memformat objek tanggal dan mem-parsing string yang diformat kembali ke objek Date. Ini menggunakan format Java (kelas SimpleDateFormat). Nama bulan dan hari dapat dilokalkan.
Contoh:
sumber
Jawabannya adalah "tidak ada di mana-mana" karena format tanggal adalah fungsi eksklusif. Saya tidak berpikir fungsi toString dimaksudkan untuk menyesuaikan dengan format tertentu. misalnya dalam spec ECMAScript 5.1 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 2/8/2013, halaman 173), fungsi toString didokumentasikan sebagai berikut :
Fungsi seperti contoh di bawah ini dapat digunakan untuk menyelesaikan pemformatan dengan cukup mudah.
sumber
Jika Anda tidak memerlukan semua fitur yang disediakan oleh perpustakaan seperti Moment.js , maka Anda dapat menggunakan port of strftime saya . Ini ringan (1,35 KB vs 57,9 KB diperkecil dibandingkan dengan Moment.js 2.15.0) dan menyediakan sebagian besar fungsionalitas
strftime()
.Penggunaan sampel:
Kode terbaru tersedia di sini: https://github.com/thdoan/strftime
sumber
Cara yang benar untuk memformat tanggal untuk mengembalikan "2012-12-29" adalah dengan skrip dari Format Tanggal JavaScript :
Kode ini TIDAK berfungsi:
sumber
Secara pribadi, karena saya menggunakan PHP dan jQuery / javascript dalam ukuran yang sama, saya menggunakan fungsi tanggal dari php.js http://phpjs.org/functions/date/
Menggunakan perpustakaan yang menggunakan string format yang sama dengan sesuatu yang sudah saya ketahui lebih mudah bagi saya, dan manual yang berisi semua kemungkinan format string untuk fungsi tanggal tentu saja online di php.net
Anda cukup memasukkan file date.js dalam HTML Anda menggunakan metode pilihan Anda kemudian menyebutnya seperti ini:
Anda dapat menggunakan d1.getTime () alih-alih valueOf () jika Anda mau, mereka melakukan hal yang sama.
Membagi dengan 1000 dari timestamp javascript adalah karena cap waktu javascript dalam milidetik tetapi timestamp PHP dalam hitungan detik.
sumber
Banyak kerangka kerja (yang mungkin sudah Anda gunakan) memiliki format tanggal yang mungkin tidak Anda sadari. jQueryUI sudah disebutkan, tetapi kerangka kerja lain seperti Kendo UI (Globalisasi) , Yahoo UI (Util) dan AngularJS memilikinya juga.
sumber