Parse string DateTime dalam JavaScript


Jawaban:


140

Lihat:

Kode:

var strDate = "03.09.1979";
var dateParts = strDate.split(".");

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);

mmm, tetapi bagaimana cara memeriksa strDate memiliki nilai yang tidak valid seperti "30.30.2000"?
Dr. No

2
@ user674887, Anda dapat membandingkan nilai setelah penguraian. misalnya dateParts [1] -1 == date.getMonth ()
Jonathan Fingland

Jika Anda memiliki tanggal kedua TIME seperti ini: "2014-05-20T16: 43: 56.71-06: 00" var partesFecha = solicitud.CreatedDate.split ("T") [0] .split ("-"); var CreatedDate = Tanggal baru (partesFecha [0], (partesFecha [1] - 1), partesFecha [2]); Tanggal pengambilan pertama sebelum T dan kemudian tahun, bulan dan hari dibagi.
RolandoCC

tidak percaya Anda harus menggunakan split untuk mendapatkan format tanggal yang diharapkan dalam javascript
Claudiu Creanga

Adakah yang merasa aneh bahwa artikel referensi Mozilla pada objek Tanggal itu sendiri mengatakannya "Note: parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies."?
NanoWizard

51

Jika Anda menggunakan jQuery UI, Anda dapat memformat tanggal apa pun dengan:

<html>
    <body>
        Your date formated: <span id="date1"></span><br/>
    </body>
</html>

 

var myDate = '30.11.2011';
var parsedDate = $.datepicker.parseDate('dd.mm.yy', myDate);

$('#date1').text($.datepicker.formatDate('M d, yy', parsedDate));

http://jsfiddle.net/mescalito2345/ND2Qg/14/


21
+1 Saya tidak melihat sebagai benar-benar di luar cakupan, JavaScript dan JQuery adalah kombinasi yang umum.
djna

Jawaban tidak harus bergantung pada pustaka yang tidak diberi tag atau disebutkan di OP. Menggunakan jQuery sebagai pustaka tanggal sangat berlebihan ketika fungsi 3 baris dapat melakukan pekerjaan yang sama.
RobG

9

Kami menggunakan kode ini untuk memeriksa apakah string adalah tanggal yang valid

var dt = new Date(txtDate.value)
if (isNaN(dt))

format yang diberikan tidak sesuai dengan format yang disyaratkan oleh developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… (dan dengan demikian konstruktor Tanggal tidak akan mencukupi)
Jonathan Fingland

Itu tidak menguji tanggal yang valid sama sekali, itu hanya menguji apakah konstruktor Tanggal dapat membuat tanggal yang valid dari input. Keduanya bukanlah hal yang sama.
RobG

6

ref: http://momentjs.com/docs/#/parsing/string/

Jika Anda menggunakan moment.js, Anda dapat menggunakan mode "string" + "format"

moment(String, String);
moment(String, String, String);
moment(String, String, Boolean);
moment(String, String, String, Boolean);

ex:

moment("12-25-1995", "MM-DD-YYYY");

2
Untuk kebanyakan kasus, MomentJS berlebihan, karena menggunakan JavaScript murni hanya membutuhkan ratusan byte, sementara MomentJS adalah 12,4kb gzip. Nyaman untuk pengembang tetapi memperlambat situs web. Tidak layak.
Raptor

3

Saya telah menggunakan kode berikut di IE. (Kompatibel dengan IE8)

var dString = "2013.2.4";
var myDate = new Date( dString.replace(/(\d+)\.(\d+)\.(\d+)/,"$2/$3/$1") );
alert( "my date:"+ myDate );


2

Gunakan objek Tanggal:

var time = Date.parse('02.02.1999');
document.writeln(time);

Berikan: 917902800000


16
new Date(Date.parse('02.02.1999'))
Duke

+1 Untuk komentar Duke tentang new Date(Date.parse('02.02.1999'))untuk Javascript
Jack

Mengembalikan NaN di setidaknya dua browser saat ini. Lihat Mengapa Date.parse memberikan hasil yang salah?
RobG

@ Duke— new Date(Date.parse('02.02.1999'))akan memberikan hasil yang identik dengan new Date('02.02.1999'), termasuk Invalid Date di beberapa browser. Menggunakan parser built-in bisa dibilang cara terburuk untuk mengurai stempel waktu.
RobG

2

Fungsi ini juga menangani tanggal 29.2.2001 yang tidak valid.

function parseDate(str) {
    var dateParts = str.split(".");
    if (dateParts.length != 3)
        return null;
    var year = dateParts[2];
    var month = dateParts[1];
    var day = dateParts[0];

    if (isNaN(day) || isNaN(month) || isNaN(year))
        return null;

    var result = new Date(year, (month - 1), day);
    if (result == null)
        return null;
    if (result.getDate() != day)
        return null;
    if (result.getMonth() != (month - 1))
        return null;
    if (result.getFullYear() != year)
        return null;

    return result;
}

0

Anda dapat memformat tanggal hanya dengan membuat jenis kode ini. Dalam javascript.

 // for eg.
              var inputdate=document.getElementById("getdate").value);
                 var datecomp= inputdate.split('.');

                Var Date= new Date(datecomp[2], datecomp[1]-1, datecomp[0]); 
                 //new date( Year,Month,Date)

Anda seharusnya menggunakan javascript bukan jquery karena tidak ada tag jquery
Sagar

bahagia ... artinya hanya memahami senario
Bachas

Baik. Saya rasa teladan Anda tidak berbeda dengan yang diberikan oleh Martin Staufcik. Faktanya jawabannya memiliki logika tambahan untuk menangani tanggal yang tidak valid.
Sagar

Martin Staufcik menangani kondisi tersebut yang tidak terjadi secara umum. dapatkah Anda memberi saya kalender apa pun yang dapat memberikan invalidates. mengapa kita harus menulis kode yang begitu panjang ketika kita dapat menangani dengan cara yang singkat. Alangkah baiknya jika Martin Staufcik juga memberikan tanggal dan waktu untuk menangani.
Bachas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.