Parse string DateTime dalam JavaScript

94

Apakah ada yang tahu cara mengurai string tanggal dalam format yang diperlukan dd.mm.yyyy?

Azat
sumber
Apakah Anda ingin membuat objek tanggal baru dari string dalam format itu?
Kieran Hall

Jawaban:

140

Lihat:

Kode:

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

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
Jonathan Fingland
sumber
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/

Mecalito
sumber
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))
Adriaan Stander
sumber
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");
sarang lebah
sumber
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 );
pengguna3444722
sumber
2

Gunakan objek Tanggal:

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

Berikan: 917902800000

HotJard
sumber
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;
}
Martin Staufcik
sumber
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)
Bachas
sumber
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