Mengonversi string ke tanggal dalam JavaScript

669

Bagaimana saya bisa mengonversi string menjadi tanggal dalam JavaScript?

var st = "date in some format"
var dt = new date();

var dt_st= //st in date format same as dt
pelawak
sumber
3
kemungkinan duplikat dari konversi data Java ke tanggal javascript dan banyak lagi
Felix Kling
1
Oh, saya bingung sekarang. Apakah kamu mau Date -> Stringatau String -> Date?
Felix Kling
10
pertimbangkan momentjs.com
hanshenrik

Jawaban:

828

Format string terbaik untuk penguraian string adalah format ISO tanggal bersama dengan konstruktor objek Tanggal JavaScript.

Contoh format ISO: YYYY-MM-DDatau YYYY-MM-DDTHH:MM:SS.

Tapi tunggu! Hanya menggunakan "format ISO" tidak bekerja dengan baik. String kadang-kadang diurai sebagai UTC dan kadang-kadang sebagai waktu lokal (berdasarkan vendor dan versi browser). Praktik terbaik harus selalu menyimpan tanggal sebagai UTC dan membuat perhitungan sebagai UTC.

Untuk mengurai tanggal sebagai UTC, tambahkan Z - misalnya: new Date('2011-04-11T10:20:30Z').

Untuk menampilkan tanggal dalam UTC, gunakan .toUTCString(),
untuk menampilkan tanggal dalam waktu setempat pengguna, gunakan .toString().

Info lebih lanjut tentang MDN | Tanggal dan jawaban ini .

Untuk kompatibilitas Internet Explorer tua (versi IE kurang dari 9 tidak mendukung format ISO di Tanggal konstruktor), Anda harus membagi datetime representasi string ke bagian itu dan kemudian Anda dapat menggunakan konstruktor menggunakan datetime bagian, misalnya: new Date('2011', '04' - 1, '11', '11', '51', '00'). Perhatikan bahwa jumlah bulan harus 1 lebih sedikit.


Metode alternatif - gunakan perpustakaan yang sesuai:

Anda juga dapat memanfaatkan perpustakaan Moment.js yang memungkinkan parsing tanggal dengan zona waktu yang ditentukan.

Pavel Hodek
sumber
Saya juga harus menggunakan metode "split the string" untuk safari untuk masalah yang sama "Nan" Paul Tomblin dibesarkan Tanggal baru ('2011-04-11 11:51:00') akan mengembalikan 'tanggal tidak valid'.
Amos
1
@Amos: Perhatikan huruf T, yang memisahkan tanggal dan waktu. Jika Anda menulis new Date('2011-04-11T11:51:00')tanggal yang dibuat valid.
Pavel Hodek
Sayangnya saya menemukan masalah * yang tidak berfungsi untuk SEMUA pengguna .
Roman Podlinov
3
Membiarkan Date mem-parsing sebuah string adalah cara terburuk untuk membuat objek Date. Jauh lebih baik untuk mengurai string secara manual dan memanggil Date sebagai konstruktor. Beberapa browser akan memperlakukan string ISO tanpa zona waktu sebagai UTC, lainnya sebagai lokal.
RobG
6
@ Ben Taliadoros: Ya, itu tidak valid di semua browser umum, new Date('1970-30-02')tanggal tidak valid karena tidak ada 30 bulan dalam setahun. Anda tidak dapat melimpahi bulan, tetapi ketika Anda melimpah hari, maka itu diselesaikan di Chrome dan Firefox ke tanggal yang valid: new Date('1970-02-30')maka hari itu sama dengan Tanggal baru ('1970-03-02').
Pavel Hodek
291

Sayangnya saya tahu itu

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

mengembalikan "Rab 02 Apr 2014". Saya tahu kedengarannya gila, tetapi itu terjadi untuk beberapa pengguna.

The solusi antipeluru adalah sebagai berikut:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());

Roman Podlinov
sumber
45
Ini tidak gila sama sekali, penyesuaian kemungkinan besar disebabkan oleh DST menendang. Tanggal dalam format yyyy-MM-dddiuraikan sebagai UTC dan toString mengembalikan waktu setempat karena itu tergantung pada zona waktu pengguna itu pasti dapat mengembalikan hasil yang berbeda. Jika selalu menginginkan waktu sebagai UTC maka Anda harus menggunakan toUTCString .
James
Memukul kepalaku untuk yang satu ini. Ini sepertinya berhasil, tetapi saya tidak mengerti mengapa Anda menggunakan bagian [0] -1 dan bukan hanya bagian [0].
Adam Youngers
4
@AdamYoungers Karena Javascript menghitung bulan dari 0: Januari - 0, Februari - 1, dll
Roman Podlinov
1
Jawaban ini menunjukkan bahwa perilaku dalam contoh ini salah. Per spec: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… (lihat: datestring) nilai output dalam contoh akan benar
James Ross
124
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

Dan hasilnya adalah:

dt => Date {Fri Apr 26 2013}
serega386
sumber
5
Sayangnya ada masalah dengan solusi ini. Detail di sini: stackoverflow.com/questions/17959660/…
Roman Podlinov
Outputnya tidak diketahui, karena kode Anda tidak mengubah apa pun menjadi string, atau menghasilkan apa pun.
Robert Siemer
81
function stringToDate(_date,_format,_delimiter)
{
            var formatLowerCase=_format.toLowerCase();
            var formatItems=formatLowerCase.split(_delimiter);
            var dateItems=_date.split(_delimiter);
            var monthIndex=formatItems.indexOf("mm");
            var dayIndex=formatItems.indexOf("dd");
            var yearIndex=formatItems.indexOf("yyyy");
            var month=parseInt(dateItems[monthIndex]);
            month-=1;
            var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
            return formatedDate;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
Kassem
sumber
3
Menangani tanggal dari setiap variasi tidak hanya pemformatan AS
Mark Jones
4
@MarkJones Jangan percaya .indexOf()metode ini karena tidak kompatibel lintas browser tanpa polyfils. Sebaliknya, gunakan metode JS yang lebih kompatibel .match()atau .test()vanilla.
Alexander Dixon
1
Menambahkan var _delimiter = _format.match(/\W/g)[0];di awal fungsi Anda bisa mendapatkan pembatas secara otomatis dan prescind dari parameter ke-3.
campsjos
39

moment.js ( http://momentjs.com/ ) adalah paket lengkap dan bagus untuk tanggal penggunaan dan mendukung string ISO 8601 .

Anda dapat menambahkan tanggal dan format string.

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

Dan Anda dapat memeriksa apakah suatu tanggal valid.

moment("not a real date").isValid(); //Returns false

Beberapa contoh tampilan

let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL')) 
// output: "3 months ago | February 1, 2019"

Lihat dokumentasi http://momentjs.com/docs/#/parsing/string-format/

Rekomendasi: Saya sarankan untuk menggunakan paket untuk tanggal yang berisi banyak format karena zona waktu dan manajemen waktu format benar-benar masalah besar, saat ini memecahkan banyak format. Anda dapat menguraikan tanggal dengan mudah dari string sederhana hingga saat ini, tetapi saya pikir itu adalah kerja keras untuk mendukung semua format dan variasi tanggal.

Juan Caicedo
sumber
1
Beberapa menampilkan contoh let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL')) keluaran: "3 bulan lalu | 1 Februari 2019"
CPHPython
36

Berikan sebagai argumen untuk Date ():

var st = "date in some format"
var dt = new Date(st);

Anda dapat mengakses tanggal, bulan, tahun menggunakan, misalnya: dt.getMonth().

wajib
sumber
8
saya lakukan console.log(new Date('30-08-2018'))dan dapatkan tanggal yang tidak valid
Dwigh
Jawaban ini mengabaikan banyak kerumitan untuk masalah ini, misalnya, jika saya melakukan ini untuk kencan 01/02/2020di komputer saya (di Inggris) itu akan mengembalikan 1 Februari di mana seolah-olah hal yang sama dilakukan di AS itu akan kembali 2 Januari. Anda seharusnya tidak pernah menggunakan implementasi naif ini. Gunakan momen saja.
Liam
23

Jika Anda dapat menggunakan pustaka momen yang hebat (mis. Dalam proyek Node.js), Anda dapat dengan mudah menguraikan tanggal dengan menggunakan mis.

var momentDate = moment("2014-09-15 09:00:00");

dan dapat mengakses objek tanggal JS melalui

momentDate ().toDate();
H6.
sumber
5
harap dicatat bahwa saat itu berfungsi dengan baik tanpa simpul
shaheer
Saya mendapat kesalahan NaN di perangkat android dan iOS saya saat menggunakan kode ini, namun itu berfungsi di desktop. di sini adalah kode yang saya gunakan sebelumnya: var dateTimeOfTimeIn = Tanggal baru (tahun + "-" + bulan + "-" + hari + "T" + data.timeIn); menggunakan pendekatan dan perpustakaan saat ini, masalah saya terpecahkan dan kode saya sekarang berfungsi dengan baik di semua perangkat saya!
Mehdi
20

new Date(2000, 10, 1) akan memberi Anda "Rab 01 Nov 2000 00:00:00 GMT + 0100 (CET)"

Lihat 0 untuk bulan memberi Anda Januari

Torsten Becker
sumber
19

Bagi mereka yang mencari solusi kecil dan cerdas:

String.prototype.toDate = function(format)
{
  var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
  var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
  var formatItems     = normalizedFormat.split('-');
  var dateItems       = normalized.split('-');

  var monthIndex  = formatItems.indexOf("mm");
  var dayIndex    = formatItems.indexOf("dd");
  var yearIndex   = formatItems.indexOf("yyyy");
  var hourIndex     = formatItems.indexOf("hh");
  var minutesIndex  = formatItems.indexOf("ii");
  var secondsIndex  = formatItems.indexOf("ss");

  var today = new Date();

  var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
  var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
  var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();

  var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
  var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
  var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();

  return new Date(year,month,day,hour,minute,second);
};

Contoh:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
Arivan Bastos
sumber
Bekerja seperti pesona! Anda menyelamatkan hidup saya Bung!
Steve Nosse
16

Hanya new Date(st);

Dengan asumsi bahwa itu format yang tepat .

Mark Kahn
sumber
Solusi terbaik dan paling sederhana
Ahmed Ghrib
12

Jika Anda ingin mengonversi dari format "dd / MM / yyyy". Berikut ini sebuah contoh:

var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);

Solusi ini berfungsi dalam versi IE kurang dari 9.

Alexandre N.
sumber
12

Stempel waktu harus dicantumkan ke suatu Angka

var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works

var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
Soni yang beruntung
sumber
1
Bagaimana dengan undefinednilainya? Suka var date = new Date(undefined):?
Benny Neugebauer
@ BennyNeugebauer juga memeriksa apakah nilai tidak terdefinisi sebelum Anda mencoba meneruskannya ke konstruktor Tanggal. Mungkin Anda ingin melempar pengecualian atau mungkin Anda ingin mundur ke tanggal default, siapa tahu?
Lucky Soni
9

Date.parsehampir membuat Anda mendapatkan apa yang Anda inginkan. Itu tersedak pada bagian am/ pm, tetapi dengan beberapa peretasan Anda bisa membuatnya bekerja:

var str = 'Sun Apr 25, 2010 3:30pm',
    timestamp;

timestamp = Date.parse(str.replace(/[ap]m$/i, ''));

if(str.match(/pm$/i) >= 0) {
    timestamp += 12 * 60 * 60 * 1000;
}
niksvp
sumber
6

Konversikan ke format pt-BR:

    var dateString = "13/10/2014";
    var dataSplit = dateString.split('/');
    var dateConverted;

    if (dataSplit[2].split(" ").length > 1) {

        var hora = dataSplit[2].split(" ")[1].split(':');
        dataSplit[2] = dataSplit[2].split(" ")[0];
        dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]);

    } else {
        dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]);
    }

Saya harap tolong seseorang !!!

Marcelo Rebouças
sumber
5

Saya telah membuat biola untuk ini, Anda dapat menggunakan fungsi toDate () pada string tanggal apa pun dan memberikan format tanggal. Ini akan mengembalikan Anda objek Date. https://jsfiddle.net/Sushil231088/q56yd0rp/

"17/9/2014".toDate("dd/MM/yyyy", "/")
Sushil Mahajan
sumber
4

Untuk mengkonversi string ke tanggal di js saya gunakan http://momentjs.com/

moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
moment().format('dddd');                    // Sunday
moment().format("MMM Do YY");               // Aug 16th 15
moment().format('YYYY [escaped] YYYY');     // 2015 escaped 2015
moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 16 hours ago
moment().endOf('day').fromNow();          // in 8 hours
Alexey Popov
sumber
1
moment () secara default mengambil tanggal saat ini. Cara memformat string yang dalam format "2016-06-27 17: 49: 51.951602 + 05: 30" menggunakan momen.
Zoran777
4

Saya membuat fungsi ini untuk mengkonversi objek Date ke objek UTC Date.

function dateToUTC(date) {
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}


dateToUTC(new Date());
Andy
sumber
3

Namun cara lain untuk melakukannya:

String.prototype.toDate = function(format) {
    format = format || "dmy";
    var separator = this.match(/[^0-9]/)[0];
    var components = this.split(separator);
    var day, month, year;
    for (var key in format) {
        var fmt_value = format[key];
        var value = components[key];
        switch (fmt_value) {
            case "d":
                day = parseInt(value);
                break;
            case "m":
                month = parseInt(value)-1;
                break;
            case "y":
                year = parseInt(value);
        }
    }
    return new Date(year, month, day);
};
a = "3/2/2017";
console.log(a.toDate("dmy"));
// Date 2017-02-03T00:00:00.000Z
Mackraken
sumber
Ah! Rapi! Akhirnya kode yang menangani pemisah apa pun yang digunakan.
Sam Sirry
3

Anda dapat mencoba ini:

function formatDate(userDOB) {
  const dob = new Date(userDOB);

  const monthNames = [
    'January', 'February', 'March', 'April', 'May', 'June', 'July',
     'August', 'September', 'October', 'November', 'December'
  ];

  const day = dob.getDate();
  const monthIndex = dob.getMonth();
  const year = dob.getFullYear();

  // return day + ' ' + monthNames[monthIndex] + ' ' + year;
  return `${day} ${monthNames[monthIndex]} ${year}`;
}

console.log(formatDate('1982-08-10'));

Syed
sumber
2
var date = new Date(year, month, day);

atau

var date = new Date('01/01/1970');

string tanggal dalam format '01 -01-1970 'tidak akan berfungsi di FireFox, jadi lebih baik gunakan "/" daripada "-" dalam string format tanggal.

Ravi
sumber
string saya adalah "2015/08/03 13:06:16" strill dalam FF itu tidak berfungsi
Dhara
2

Jika Anda perlu memeriksa konten string sebelum mengonversi ke format Tanggal:

// Convert 'M/D/YY' to Date()
mdyToDate = function(mdy) {
  var d = mdy.split(/[\/\-\.]/, 3);

  if (d.length != 3) return null;

  // Check if date is valid
  var mon = parseInt(d[0]), 
      day = parseInt(d[1]),
      year= parseInt(d[2]);
  if (d[2].length == 2) year += 2000;
  if (day <= 31 && mon <= 12 && year >= 2015)
    return new Date(year, mon - 1, day);

  return null; 
}
Adriano P
sumber
2

Saya telah membuat fungsi parseDateTime untuk mengonversi objek string ke tanggal dan berfungsi di semua browser (termasuk browser IE), periksa apakah ada yang diperlukan, referensi https://github.com/Umesh-Markande/Parse-String-to-Date -di-semua-browser

    function parseDateTime(datetime) {
            var monthNames = [
                "January", "February", "March",
                "April", "May", "June", "July",
                "August", "September", "October",
                "November", "December"
              ];
            if(datetime.split(' ').length == 3){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1].replace('.00','');
                var timearray = time.split(':');
                var hours = parseInt(time.split(':')[0]);
                var format = datetime.split(' ')[2];
                var bits = date.split(/\D/);
                date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = date.getDate();
                var monthIndex = date.getMonth();
                var year = date.getFullYear();
                if ((format === 'PM' || format === 'pm') && hours !== 12) {
                    hours += 12;
                    try{  time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] }
                } 
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime.split(' ').length == 2){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1];
                var bits = date.split(/\D/);
                var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = datetimevalue.getDate();
                var monthIndex = datetimevalue.getMonth();
                var year = datetimevalue.getFullYear();
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime != ''){
                var bits = datetime.split(/\D/);
                var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                return date;
            }
            return datetime;
        }

    var date1 = '2018-05-14 05:04:22 AM';   // yyyy-mm-dd hh:mm:ss A
    var date2 = '2018/05/14 05:04:22 AM';   // yyyy/mm/dd hh:mm:ss A
    var date3 = '2018/05/04';   // yyyy/mm/dd
    var date4 = '2018-05-04';   // yyyy-mm-dd
    var date5 = '2018-05-14 15:04:22';   // yyyy-mm-dd HH:mm:ss
    var date6 = '2018/05/14 14:04:22';   // yyyy/mm/dd HH:mm:ss

    console.log(parseDateTime(date1))
    console.log(parseDateTime(date2))
    console.log(parseDateTime(date3))
    console.log(parseDateTime(date4))
    console.log(parseDateTime(date5))
    console.log(parseDateTime(date6))

**Output---**
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time)
Umesh Markande
sumber
Yang ini berhasil untuk saya. Terima kasih.
Christopher D. Emerson
2

Jawaban ini didasarkan pada jawaban Kassem tetapi juga menangani dua digit tahun. Saya mengirimkan suntingan ke jawaban Kassem, tetapi jika itu tidak disetujui, saya juga mengirimkan ini sebagai jawaban terpisah.

function stringToDate(_date,_format,_delimiter) {
        var formatLowerCase=_format.toLowerCase();
        var formatItems=formatLowerCase.split(_delimiter);
        var dateItems=_date.split(_delimiter);
        var monthIndex=formatItems.indexOf("mm");
        var dayIndex=formatItems.indexOf("dd");
        var yearIndex=formatItems.indexOf("yyyy");
        var year = parseInt(dateItems[yearIndex]); 
        // adjust for 2 digit year
        if (year < 100) { year += 2000; }
        var month=parseInt(dateItems[monthIndex]);
        month-=1;
        var formatedDate = new Date(year,month,dateItems[dayIndex]);
        return formatedDate;
}

stringToDate("17/9/14","dd/MM/yyyy","/");
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
Daniel Patru
sumber
1

Anda dapat menggunakan regex untuk mem-parsing string ke detail waktu kemudian membuat tanggal atau format pengembalian seperti:

//example : let dateString = "2018-08-17 01:02:03.4"

function strToDate(dateString){
    let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/
  , [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
  return dateObject;
}
alert(strToDate(dateString));
TungHarry
sumber
1

Performa

Hari ini (2020.05.08) Saya melakukan tes untuk solusi yang dipilih - untuk dua kasus: tanggal input adalah string ISO8601 (Iklan, Bd, Cd, Dd, Ed) dan tanggal input adalah stempel waktu (At, Ct, Dt). Solusi Bd, Cd, Ct tidak mengembalikan objek Date js sebagai hasil, tapi saya menambahkannya karena mereka bisa berguna tetapi saya tidak membandingkannya dengan solusi yang valid. Hasil ini dapat bermanfaat untuk penguraian tanggal yang besar.

Kesimpulan

  • Larutan new Date (Iklan) adalah 50-100x lebih cepat daripada moment.js (Dd) untuk semua browser untuk tanggal dan cap waktu ISO
  • Larutan new Date (Iklan) ~ 10x lebih cepat dari parseDate(Ed)
  • Solusi Date.parse(Bd) adalah tercepat jika kita perlu mendapatkan cap waktu dari tanggal ISO di semua browser

masukkan deskripsi gambar di sini

Detail

Saya melakukan pengujian pada MacOs High Sierra 10.13.6 di Chrome 81.0, Safari 13.1, Firefox 75.0. Solusi parseDate(Ed) digunakan new Date(0)dan secara manual mengatur komponen tanggal UTC.

Hasil untuk chrome

masukkan deskripsi gambar di sini

Kamil Kiełczewski
sumber
0

Datestrings ISO 8601-esque, sebagus standarnya, masih belum didukung secara luas.

Ini adalah sumber yang bagus untuk mengetahui format datestring mana yang harus Anda gunakan:

http://dygraphs.com/date-formats.html

Ya, itu berarti bahwa data Anda bisa sesederhana yang bertentangan

"2014/10/13 23:57:52" dari pada "2014-10-13 23:57:52"

tavera
sumber
0
                //little bit of code for Converting dates 

                var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);
Pec1983
sumber
0

gunakan kode ini: (masalah saya terpecahkan dengan kode ini)

function dateDiff(date1, date2){
var diff = {}                           // Initialisation du retour
var tmp = date2 - date1;

tmp = Math.floor(tmp/1000);             // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60;                    // Extraction du nombre de secondes

tmp = Math.floor((tmp-diff.sec)/60);    // Nombre de minutes (partie entière)
diff.min = tmp % 60;                    // Extraction du nombre de minutes

tmp = Math.floor((tmp-diff.min)/60);    // Nombre d'heures (entières)
diff.hour = tmp % 24;                   // Extraction du nombre d'heures

tmp = Math.floor((tmp-diff.hour)/24);   // Nombre de jours restants
diff.day = tmp;

return diff;

}

Fetra
sumber
3
tolong jelaskan jawaban Anda
Mazz
parameter date1 dan date2 harus memiliki format sebagai tanggal yang benar.
Fetra
tanggal pengembalian fungsi bernama diff. Jika Anda ingin jumlah hari dikembalikan lakukan saja seperti itu: var result = dateDiff (date1, date2); var day_number = result.day; itu mudah
Fetra
0

Saya menulis fungsi yang dapat digunakan kembali yang saya gunakan ketika saya mendapatkan string tanggal dari server.
Anda dapat melewati pembatas yang Anda inginkan (/ - dll.) yang memisahkan hari bulan dan tahun untuk menggunakan split()metode ini.
Anda dapat melihat & mengujinya pada contoh kerja ini .

<!DOCTYPE html>
<html>
  <head>
    <style>
    </style>
  </head>
  <body>
    <div>
      <span>day:
      </span> 
      <span id='day'>
      </span>
    </div>
    <div>
      <span>month:
      </span> 
      <span id='month'>
      </span>
    </div>
    <div>
      <span>year:
      </span> 
      <span id='year'>
      </span>
    </div>
    <br/>
    <input type="button" id="" value="convert" onClick="convert('/','28/10/1980')"/>
    <span>28/10/1980
    </span>
    <script>
      function convert(delimiter,dateString)
      {
        var splitted = dateString.split('/');
        // create a new date from the splitted string 
        var myDate = new Date(splitted[2],splitted[1],splitted[0]);
        // now you can access the Date and use its methods 
        document.getElementById('day').innerHTML = myDate.getDate();
        document.getElementById('month').innerHTML = myDate.getMonth();
        document.getElementById('year').innerHTML = myDate.getFullYear();
      }
    </script>
  </body>
</html>
Jonathana
sumber
0

Namun cara lain untuk melakukannya adalah membangun regex dengan kelompok tangkapan bernama di atas string format dan kemudian menggunakan regex itu untuk mengekstrak hari, bulan, dan tahun dari string tanggal:

function parseDate(dateStr, format) {
  const regex = format.toLocaleLowerCase()
    .replace(/\bd+\b/, '(?<day>\\d+)')
    .replace(/\bm+\b/, '(?<month>\\d+)')
    .replace(/\by+\b/, '(?<year>\\d+)')
  
  const parts = new RegExp(regex).exec(dateStr) || {};
  const { year, month, day } = parts.groups || {};
  return parts.length === 4 ? new Date(year, month-1, day) : undefined;
}

const printDate = x => console.log(x ? x.toLocaleDateString() : x);

printDate(parseDate('05/11/1896', 'dd/mm/YYYY'));
printDate(parseDate('07-12-2000', 'dd-mm-yy'));
printDate(parseDate('07:12:2000', 'dd:mm:yy'));
printDate(parseDate('2017/6/3', 'yy/MM/dd'));
printDate(parseDate('2017-6-15', 'y-m-d'));
printDate(parseDate('2015 6 25', 'y m d'));
printDate(parseDate('2015625', 'y m d')); // bad format

jo_va
sumber
solusi yang bagus, tetapi Anda mungkin tidak menyadari bahwa Firefox masih tidak mendukung grup bernama RegExp - bugzilla.mozilla.org/show_bug.cgi?id=1362154 (PS: bukan saya yang
menurunkan