Pertanyaan Di mana saya dapat menemukan dokumentasi tentang memformat tanggal dalam JavaScript? [Tutup]


Saya perhatikan bahwa JavaScript new Date() fungsi sangat pintar 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 saja menampilkan semua format string yang valid saat menelepon new Date() fungsi.

Ini untuk mengonversi string menjadi tanggal. Jika kita melihat sisi yang berlawanan, artinya, mengonversi objek tanggal menjadi string, hingga kini saya mendapat kesan bahwa JavaScript tidak memiliki API yang tertanam untuk memformat objek tanggal menjadi string.

Catatan Editor: Pendekatan berikut adalah upaya penanya yang bekerja pada browser tertentu, tetapi tidak tidak bekerja secara umum; lihat jawabannya di halaman ini untuk melihat beberapa solusi yang sebenarnya.

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 apapun tentang semua cara kami dapat memformat objek tanggal menjadi string.

Di mana dokumentasi yang berisi daftar penspesifikasi format yang didukung oleh Date() obyek?


1293
2018-06-29 05:46


asal


Jawaban:


aku cinta 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:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

Contoh:

        var d = new Date();
        var curr_date = d.getDate();
        var curr_month = d.getMonth() + 1; //Months are zero based
        var curr_year = d.getFullYear();
        console.log(curr_date + "-" + curr_month + "-" + curr_year);


1010
2018-04-12 07:18



Moment.js

Ini adalah perpustakaan tanggal JavaScript (ringan) * untuk penguraian, manipulasi, dan pemformatan tanggal.

var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA");                       // "Sun, 3PM"

(*) makna ringan 9.3KB yang diperkecil + gzip dalam pengaturan terkecil yang memungkinkan (feb 2014) 


670
2017-08-11 07:27



Jika Anda sudah menggunakan UI jQuery dalam proyek Anda, Anda dapat menggunakan metode datepicker bawaan untuk memformat objek tanggal Anda:

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

Namun, datepicker hanya memformat tanggal, dan tidak dapat memformat kali.

Silahkan lihat jQuery UI datepicker formatDate, contohnya.


419
2017-08-03 16:55



Di mana dokumentasi yang berisi daftar penspesifikasi format yang didukung oleh Date() obyek?

Saya tersandung pada 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 manipulasi tanggal. Beberapa lebih baik dari yang lain. Tapi itu bukan pertanyaan yang diajukan.

AFAIK, JavaScript murni tidak mendukung penspesifikasi format cara Anda mengindikasikan ingin menggunakannya. Tetapi ia mendukung metode untuk memformat tanggal dan / atau waktu, seperti .toLocaleDateString(), .toLocaleTimeString(), dan .toUTCString().

Itu Date referensi objek yang paling sering saya gunakan adalah pada situs web w3schools.com (tapi pencarian Google cepat akan mengungkapkan lebih banyak lagi yang mungkin lebih memenuhi kebutuhan Anda).

Juga perhatikan bahwa Tanggal Properti Objek bagian menyediakan tautan ke prototype, yang menggambarkan beberapa cara Anda dapat memperpanjang objek Tanggal dengan metode khusus. Telah ada beberapa perdebatan dalam komunitas JavaScript selama bertahun-tahun tentang apakah atau tidak ini adalah praktik terbaik, dan saya tidak menganjurkan atau menentangnya, hanya menunjukkan keberadaannya.


215
2018-05-21 12:48



Fungsi pemformatan khusus:

Untuk format tetap, fungsi sederhana membuat pekerjaan. Contoh berikut menghasilkan format internasional YYYY-MM-DD:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

Catatan: Namun, biasanya bukan ide yang baik untuk memperluas pustaka 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 untuk menulis fungsi pemformatan terlalu panjang, ada banyak pustaka di sekitar yang melakukannya. Beberapa jawaban lain sudah menyebutkannya. Tetapi meningkatkan ketergantungan juga memiliki hal yang berlawanan.

Fungsi pemformatan ECMAScript standar:

Karena versi terbaru dari ECMAscript, Date kelas memiliki beberapa fungsi pemformatan spesifik:

toDateString: Implementasi bergantung, hanya tampilkan tanggal.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString: Tampilkan tanggal dan waktu ISO 8601.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON: Stringifier untuk JSON.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString: Pelaksanaan tergantung, tanggal dalam format lokal.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocatatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString: Implementasi tergantung, tanggal & waktu dalam format lokal.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString: Implementasi tergantung, waktu dalam format lokal.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString: ToString Generik untuk Tanggal.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

Catatan: dimungkinkan untuk menghasilkan keluaran kustom dari fungsi pemformatan tersebut:

new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD

200
2017-07-02 20:07



Jawaban Singkat

Tidak ada dokumentasi "universal" yang dijelajahi oleh javascript; setiap browser yang memiliki javascript benar-benar merupakan implementasi. Namun, ada standar yang cenderung diikuti oleh sebagian besar browser modern, dan itu adalah standar EMCAScript; string standar ECMAScript akan mengambil, minimal, implementasi modifikasi dari definisi ISO 8601.

Selain ini, ada standar kedua yang ditetapkan oleh IETF bahwa browser cenderung mengikuti juga, yang merupakan definisi untuk cap waktu yang dibuat di RFC 2822. Dokumentasi aktual dapat ditemukan dalam daftar referensi di bagian bawah.

Dari ini Anda dapat mengharapkan fungsionalitas dasar, tetapi apa yang "seharusnya" tidak secara inheren adalah apa "adalah". Saya akan sedikit membahas secara prosedural, karena tampaknya hanya tiga orang yang benar-benar menjawab pertanyaan (Scott, goofballLogic, dan peller) yang, bagi saya, menunjukkan bahwa kebanyakan orang tidak menyadari apa yang sebenarnya terjadi ketika Anda buat objek Tanggal.


Jawaban Panjang

Di mana dokumentasi yang berisi daftar penspesifikasi format yang didukung oleh objek Date ()?


Untuk menjawab pertanyaan, atau bahkan mencari jawaban untuk pertanyaan ini, Anda perlu tahu bahwa javascript bukan bahasa baru; ini sebenarnya adalah implementasi ECMAScript, dan mengikuti standar ECMAScript (tetapi perhatikan, javascript juga benar-benar telah memenuhi standar tersebut; standar EMCAScript dibangun dari penerapan awal LiveScript / JavaScript). Standar ECMAScript saat ini adalah 5.1 (2011); pada saat pertanyaan itu awalnya ditanyakan (Juni '09), standarnya adalah 3 (4 diabaikan), tetapi 5 dirilis tidak lama setelah posting pada akhir tahun 2009. Ini harus menguraikan satu masalah; apa standar implementasi javascript mungkin mengikuti, mungkin tidak mencerminkan apa yang sebenarnya di tempat, karena a) itu merupakan implementasi standar yang diberikan, b) tidak semua implementasi standar adalah puritan, dan c) fungsi tidak dirilis dalam sinkronisasi dengan standar baru sebagai d) implementasi adalah pekerjaan konstan yang sedang berjalan

Pada dasarnya, ketika berhadapan dengan javascript, Anda berurusan dengan turunan (javascript spesifik untuk browser) dari implementasi (javascript sendiri). Google V8, misalnya, mengimplementasikan ECMAScript 5.0, tetapi JScript Internet Explorer tidak berupaya menyesuaikan dengan standar ECMAScript, namun Internet Explorer 9 tidak sesuai dengan ECMAScript 5.0.

Ketika satu argumen dilewatkan ke Date baru (), itu melemparkan prototipe fungsi ini:

new Date(value)

Ketika dua atau lebih argumen dilewatkan ke Date baru (), itu melemparkan prototipe fungsi ini:

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )


Kedua fungsi tersebut harus terlihat akrab, tetapi ini tidak segera menjawab pertanyaan Anda dan apa yang dikuantifikasi sebagai "format tanggal" yang dapat diterima memerlukan penjelasan lebih lanjut. Ketika Anda mengirimkan string ke Date baru (), itu akan memanggil prototipe (perhatikan bahwa saya menggunakan kata tersebut prototipe longgar; versi dapat berupa fungsi individual, atau mungkin merupakan bagian dari pernyataan bersyarat dalam satu fungsi) untuk Tanggal baru (nilai) dengan string Anda sebagai argumen untuk parameter "nilai". Fungsi ini akan memeriksa dulu apakah itu angka atau string. Dokumentasi untuk fungsi ini dapat ditemukan di sini:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

Dari sini, kita dapat menyimpulkan bahwa untuk mendapatkan pemformatan string yang diijinkan untuk Tanggal (nilai) baru, kita harus melihat metode Date.parse (string). Dokumentasi untuk metode ini dapat ditemukan di sini:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

Dan kita dapat menyimpulkan lebih lanjut bahwa tanggal diharapkan berada dalam Format Perpanjangan ISO 8601 yang dimodifikasi, seperti yang ditentukan di sini:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

Namun, kami dapat mengenali dari pengalaman bahwa objek Tanggal javascript menerima format lain (diberlakukan oleh keberadaan pertanyaan ini di tempat pertama), dan ini tidak masalah karena ECMAScript memungkinkan untuk penerapan format khusus. Namun, itu masih belum menjawab pertanyaan tentang dokumentasi apa yang tersedia pada format yang tersedia, atau format apa yang sebenarnya diizinkan. Kami akan melihat penerapan 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 di V8 mewakili semua format yang tersedia saat ini, tapi saya pikir itu adil berasumsi bahwa mereka mengikuti harapan modern.

Google V8, date.js, DateConstructor

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

Melihat fungsi DateConstructor, kita dapat menyimpulkan bahwa kita perlu menemukan fungsi DateParse; Namun, catat bahwa "tahun" bukanlah tahun yang sebenarnya dan hanya referensi untuk parameter "tahun".

Google V8, date.js, DateParse

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

Ini panggilan% DateParseString, yang sebenarnya adalah referensi fungsi run-time untuk fungsi C ++. Ini mengacu pada kode berikut:

Google V8, runtime.cc,% DateParseString

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

Fungsi panggilan yang kita perhatikan dalam fungsi ini adalah untuk DateParser :: Parse (); mengabaikan logika yang mengelilingi panggilan fungsi tersebut, ini hanyalah pemeriksaan untuk menyesuaikan dengan jenis pengkodean (ASCII dan UC16). DateParser :: Parse didefinisikan di sini:

Google V8, dateparser-inl.h, DateParser :: Parse

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

Ini adalah fungsi yang benar-benar menentukan format apa yang diterima. Pada dasarnya, ia memeriksa standar EMCAScript 5.0 ISO 8601 dan jika tidak memenuhi standar, maka ia akan berusaha untuk membangun tanggal berdasarkan format warisan. Beberapa poin penting berdasarkan komentar:

  1. Kata-kata sebelum angka pertama yang tidak diketahui oleh parser diabaikan.
  2. Teks yang disengaja diabaikan.
  3. Nomor tidak bertanda yang diikuti oleh ":" diartikan sebagai "komponen waktu".
  4. Nomor tidak bertanda diikuti oleh "." Diartikan sebagai "komponen waktu", dan harus diikuti oleh milidetik.
  5. Nomor yang ditandatangani diikuti oleh jam atau jam menit (misalnya +5: 15 atau +0515) ditafsirkan sebagai zona waktu.
  6. Saat menyatakan jam dan menit, Anda dapat menggunakan "hh: mm" atau "hhmm".
  7. Kata-kata yang menunjukkan zona waktu ditafsirkan sebagai zona waktu.
  8. Semua nomor lainnya ditafsirkan sebagai "komponen tanggal".
  9. Semua kata yang dimulai dengan tiga digit pertama setiap bulan ditafsirkan sebagai bulannya.
  10. Anda dapat menentukan menit dan jam bersama dalam salah satu dari dua format: "hh: mm" atau "hhmm".
  11. Simbol seperti "+", "-" dan tidak cocok ")" tidak diizinkan setelah nomor telah diproses.
  12. Item yang cocok dengan beberapa format (misalnya 1970-01-01) diproses sebagai string standar EMCAScript 5.0 ISO 8601 yang sesuai standar.

Jadi ini harus cukup untuk memberi Anda ide dasar tentang apa yang diharapkan ketika datang untuk mengirimkan string ke objek Tanggal. Anda dapat memperluas lebih lanjut dengan melihat spesifikasi berikut yang ditunjukkan Mozilla di Mozilla Developer Network (sesuai dengan cap waktu IETF RFC 2822):

http://tools.ietf.org/html/rfc2822#page-14

Jaringan Pengembang Microsoft juga menyebutkan standar tambahan untuk objek Tanggal: ECMA-402, Spesifikasi API Internasionalisasi ECMAScript, yang melengkapi standar ECMAScript 5.1 (dan yang akan datang). Itu dapat ditemukan di sini:

http://www.ecma-international.org/ecma-402/1.0/

Dalam hal apapun, ini harus membantu dalam menyoroti bahwa tidak ada "dokumentasi" yang secara universal mewakili semua implementasi javascript, tetapi masih ada cukup dokumentasi yang tersedia untuk membuat akal sehat dari string apa yang diterima untuk objek Date. Cukup pertanyaan yang dimuat ketika Anda memikirkannya, ya? : P

Referensi

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://tools.ietf.org/html/rfc2822#page-14

http://www.ecma-international.org/ecma-402/1.0/

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

Sumber daya

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx


121
2017-11-19 11:31



Pastikan Anda membayar Datejs ketika berhadapan dengan tanggal di JavaScript. Ini cukup mengesankan dan didokumentasikan dengan baik seperti yang Anda lihat dalam kasus fungsi toString.

EDIT: Tyler Forsythe menunjukkan, bahwa datejs sudah ketinggalan zaman. Saya menggunakannya dalam proyek saya saat ini dan tidak ada masalah dengan itu, namun Anda harus menyadari hal ini dan mempertimbangkan alternatif.


91
2017-09-07 03:23



Anda hanya bisa memperluas Date Obyek dengan yang baru format metode sebagaimana dicatat oleh meizz, di bawah ini adalah kode yang diberikan oleh penulis. Dan di sini adalah a jsfiddle.

Date.prototype.format = function(format) //author: meizz
{
  var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(),    //day
    "h+" : this.getHours(),   //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
    "S" : this.getMilliseconds() //millisecond
  }

  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length==1 ? o[k] :
        ("00"+ o[k]).substr((""+ o[k]).length));
  return format;
}

alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));

68
2017-08-31 09:59