JavaScript'te bir dizeyi tarihe dönüştürme


669

Bir dizeyi JavaScript'te bir tarihe nasıl dönüştürebilirim?

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

var dt_st= //st in date format same as dt


1
Şimdi kafam karıştı. İstediğiniz musunuz Date -> Stringyoksa String -> Date?
Felix Kling

10
düşünmek momentjs.com
hanshenrik

Yanıtlar:


827

Dize ayrıştırma için en iyi dize biçimi, JavaScript Date nesne yapıcısıyla birlikte tarih ISO biçimidir.

ISO formatı örnekleri: YYYY-MM-DDveyaYYYY-MM-DDTHH:MM:SS .

Fakat bekle! Sadece "ISO formatını" kullanmak kendi başına güvenilir bir şekilde çalışmaz. Dize bazen UTC ve bazen de yerel saat olarak ayrıştırılır (tarayıcı satıcısına ve sürümüne göre). En iyi uygulama her zaman tarihleri ​​UTC olarak saklamak ve UTC olarak hesaplamalar yapmak olmalıdır.

Bir tarihi UTC olarak ayrıştırmak için bir Z ekleyin - ör:new Date('2011-04-11T10:20:30Z') .

UTC'de bir tarih görüntülemek için, tuşunu .toUTCString(),
kullanıcının yerel saatinde bir tarih görüntülemek için tuşunu kullanın..toString() .

MDN Hakkında Daha Fazla Bilgi | Tarih ve bu cevap .

Eski Internet Explorer uyumluluk için (IE sürümleri az 9'dan tarihi yapıcı ISO formatını desteklemez) kullanarak, 's parçalara tarih saat dize temsilini bölmek gerekir, ardından tarih saat parçaları, örneğin kullanarak yapıcısını kullanabilirsiniz: new Date('2011', '04' - 1, '11', '11', '51', '00'). Ay sayısının 1'den az olması gerektiğini unutmayın.


Alternatif yöntem - uygun bir kitaplık kullanın:

Ayrıca , belirtilen saat dilimiyle tarihi ayrıştırmaya izin veren Moment.js kütüphanesinden de yararlanabilirsiniz .


Ayrıca Paul Tomblin'in gündeme getirdiği aynı "Nan" sorunu için safari için "string the string" yöntemini kullanmak zorunda kaldım. yeni Tarih ('2011-04-11 11:51:00') 'geçersiz tarih' döndürür.
Amos

1
@Amos: Tarih ve saati ayıran T harfine dikkat edin. Yazdığınızda new Date('2011-04-11T11:51:00')oluşturulan tarih geçerlidir.
Pavel Hodek

Maalesef TÜM kullanıcılar için işe yaramadığı sorunuyla karşılaştım .
Roman Podlinov

3
Tarihin bir dizeyi ayrıştırmasına izin vermek bir Date nesnesi oluşturmanın en kötü yoludur. Dizeyi manuel olarak ayrıştırmak ve bir yapıcı olarak Date'i çağırmak çok daha iyi. Bazı tarayıcılar bir ISO dizesini saat dilimi olmadan UTC, diğerleri yerel olarak kabul eder.
RobG

6
@Ben Taliadoros: Evet, tüm yaygın tarayıcılarda new Date('1970-30-02')geçersiz, bir tarihte 30 ay olmadığı için geçersiz bir tarih. Ayları geçemezsiniz, ancak günleri aştığınızda , Chrome ve Firefox'ta geçerli bir tarihe çözümlenir : new Date('1970-02-30')o zaman yeni Tarih ('1970-03-02') ile aynı gün olur.
Pavel Hodek

291

Maalesef bunu öğrendim

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

"02 Nisan 2014 Çar." Çılgınca geldiğini biliyorum, ama bazı kullanıcılar için oluyor.

Kurşun çözeltisi şu şekildedir:

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());


45
Bu hiç de çılgınca değil, ayarlama büyük olasılıkla DST tekmelemesinden kaynaklanıyor . Biçimindeki tarihler yyyy-MM-ddUTC olarak ayrıştırılır ve toString yerel saati döndürür, bu nedenle kullanıcıların saat dilimine bağlı olarak kesinlikle farklı sonuçlar döndürebilir. Her zaman saati UTC olarak istiyorsanız, toUTCString öğesini kullanmalısınız .
James

Bu konuda kafamı vurarak. Bu işe yarıyor gibi görünüyor, ama neden sadece [0] parçalarını değil [0] -1 parçalarını kullandığınızı anlamıyorum.
Adam Youngers

4
@AdamYoungers Javascript nedeniyle 0: Ocak - 0, Şubat - 1, vb.
Ayları sayar

1
Bu yanıt, örnekteki davranışın yanlış olduğunu gösterir. Spesifikasyona göre: developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/… (bkz: deneme) örnekte çıktı değeri doğru olacaktır
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'));

Ve çıktı:

dt => Date {Fri Apr 26 2013}

5
Maalesef bu çözümle ilgili bir sorun var. Ayrıntılar burada: stackoverflow.com/questions/17959660/…
Roman Podlinov

Çıktı bilinmiyor çünkü kodunuz hiçbir şeyi bir dizgiye dönüştürmüyor ya da herhangi bir çıktı vermiyor.
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","-")

3
Yalnızca ABD biçimlendirmesi değil, her varyasyondan tarihleri
Mark Jones

4
@MarkJones Polyfils .indexOf()olmadan çapraz tarayıcı uyumlu olmadığından yönteme güvenmeyin. Bunun yerine, daha uyumlu .match()veya .test()vanilya JS yöntemlerini kullanın.
Alexander Dixon

1
var _delimiter = _format.match(/\W/g)[0];Fonksiyonun başlangıcına ekleyerek , sınırlayıcıyı otomatik olarak alabilir ve 3. parametreyi önceden ayarlayabilirsiniz.
campsjos

39

moment.js ( http://momentjs.com/ ) kullanım tarihleri ​​için eksiksiz ve iyi bir pakettir ve ISO 8601 dizelerini destekler .

Bir dize tarihi ve biçimi ekleyebilirsiniz.

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

Ve bir tarihin geçerli olup olmadığını kontrol edebilirsiniz.

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

Bazı ekran örnekleri

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

Bkz. Belgeler http://momentjs.com/docs/#/parsing/string-format/

Öneri: Zaman dilimi ve format zaman yönetimi gerçekten büyük bir sorun olduğu için çok fazla format içeren tarihler için bir paket kullanmanızı öneririz, an js birçok formatı çözer. Basit bir dizeden bugüne kolayca ayrışabilirsin, ancak tarihlerin tüm formatlarını ve varyasyonlarını desteklemek zor bir iş olduğunu düşünüyorum.


1
Bazı ekran örnekleri let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL')) çıktıları: "3 ay önce | 1 Şubat 2019"
CPHPython

36

Date () öğesine argüman olarak iletin:

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

Tarihe, aya, yıla, örneğin: ile erişebilirsiniz dt.getMonth().


8
i do console.log(new Date('30-08-2018'))ve geçersiz tarihi almak
Dwigh

Bu yanıt, bu sorunun birden fazla karmaşıklığını göz ardı eder, örneğin, bunu 01/02/2020bilgisayarımda (İngiltere'de) bir tarih için yaparsam , ABD'de aynı şey yapılıyorsa 2 Ocak'a dönecek şekilde 1 Şubat'a dönecektir. Bu saf uygulamayı asla kullanmamalısınız. Kullanım anı yerine.
Liam

23

Müthiş moment kütüphanesini (örneğin, bir Node.js projesinde) kullanabiliyorsanız, örn.

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

ve JS tarih nesnesine

momentDate ().toDate();

5
Lütfen anın düğüm olmadan gayet iyi çalıştığını unutmayın
shaheer

Bu kodu kullanırken android ve IOS cihazlarda NaN hatası aldım, ancak masaüstünde çalışıyordu. burada daha önce kullandığım kod var: var dateTimeOfTimeIn = new Date (yıl + "-" + ay + "-" + gün + "T" + data.timeIn); Bu yaklaşımı ve moment kütüphanesini kullanarak sorunum çözüldü ve kodum artık tüm cihazlarda düzgün çalışıyor!
Mehdi

20

new Date(2000, 10, 1) size "Çar 01 Kasım 2000 00:00:00 GMT + 0100 (CET)" verecek

Ay için 0'ın Ocak ayını verdiğini görün


19

Küçük ve akıllı bir çözüm arayanlar için:

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);
};

Misal:

"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");

Tıkır tıkır çalışıyor! Hayatımı kurtardın ahbap!
Steve Nosse


12

"Gg / aa / yyyy" biçiminden dönüştürmek istiyorsanız. İşte bir örnek:

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]);

Bu çözüm 9'dan az IE sürümlerinde çalışır.


12

Zaman damgaları bir Sayıya dökülmelidir

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

1
undefinedDeğer ne olacak ? Gibi: var date = new Date(undefined)?
Benny Neugebauer

@BennyNeugebauer, Date yapıcısına iletmeyi denemeden önce bir değerin tanımsız olup olmadığını kontrol edin. Belki bir istisna atmak istersiniz ya da varsayılan bir tarihe geri dönmek istersiniz, kim bilir?
Şanslı Soni

9

Date.parseneredeyse istediğini alır. am/ Parçasını boğar pm, ancak bazı hack'lerle çalışabilirsiniz:

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;
}

6

Pt-BR formatına dönüştürün:

    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]);
    }

Umarım birine yardım !!!



4

Js içinde bugüne kadar dize dönüştürme için kullanıyorum 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

1
moment () varsayılan olarak geçerli tarihi alır. "2016-06-27 17: 49: 51.951602 + 05: 30" biçimindeki bir dizeyi moment kullanarak biçimlendirme.
Zoran777

4

Bu işlevi herhangi bir Date nesnesini UTC Date nesnesine dönüştürmek için yaptım.

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


dateToUTC(new Date());

3

Bunu yapmanın başka bir yolu:

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

Ah! Temiz! Son olarak, kullanılan ayırıcıyla ilgilenen bir kod.
Sam Sirry

3

Bunu deneyebilirsiniz:

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'));


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

veya

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

'01 -01-1970 'biçimindeki tarih dizesi FireFox'ta çalışmaz. Bu nedenle, tarih biçimi dizesinde "-" yerine "/" kullanın.


benim dize "2015/08/03 13:06:16" FF strill çalışmıyor
Dhara

2

Tarih biçimine dönüştürmeden önce dizenin içeriğini kontrol etmeniz gerekiyorsa:

// 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; 
}

2

Dizeyi tarih nesnesine dönüştürmek için parseDateTime işlevi oluşturdum ve tüm tarayıcıda (IE tarayıcı dahil) çalışıyor, gerekli olup olmadığını kontrol edin, https://github.com/Umesh-Markande/Parse-String-to-Date referans -in-all-tarayıcı

    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)

Bu benim için çalıştı. Teşekkür ederim.
Christopher D. Emerson

2

Bu cevap Kassem en dayanmaktadır cevap ama aynı zamanda iki basamaklı yıl işler. Kassem'in cevabına bir düzenleme gönderdim, ancak onaylanmadığı takdirde bunu ayrı bir cevap olarak da gönderiyorum.

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","-")

1

Dizeyi ayrıntı zamanına ayrıştırmak için regex'i kullanabilir, sonra tarih veya aşağıdaki gibi bir dönüş biçimi oluşturabilirsiniz:

//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));

1

Verim

Bugün (2020.05.08) Seçilen çözümler için testler yapıyorum - iki durum için: giriş tarihi ISO8601 dizesi (Ad, Bd, Cd, Dd, Ed) ve giriş tarihi zaman damgası (At, Ct, Dt). Çözümler Bd, Cd, Ct js Date nesnesini sonuç olarak döndürmez, ancak yararlı olabilecekleri için eklerim, ancak geçerli çözümlerle karşılaştırmam. Bu sonuçlar büyük tarih ayrıştırması için yararlı olabilir.

Sonuçlar

  • Çözüm new Date (Reklam), ISO tarihi ve zaman damgası için tüm tarayıcılarda moment.js'den (Dd) 50-100x daha hızlıdır
  • Çözüm new Date(Reklam) ~ 10x daha hızlıparseDate (Ed) '
  • Date.parseTüm tarayıcılarda ISO tarihinden zaman damgası almanız gerekiyorsa en hızlı çözüm (Bd)

resim açıklamasını buraya girin

ayrıntılar

Chrome 81.0, Safari 13.1, Firefox 75.0 üzerinde MacOs High Sierra 10.13.6 üzerinde test yapıyorum. Çözüm parseDate(Ed) kullanın new Date(0)ve UTC tarih bileşenlerini manuel olarak ayarlayın.

Chrome kelimesi için sonuçlar

resim açıklamasını buraya girin


0

ISO 8601-esque datestringler, standart kadar mükemmel, hala geniş çapta desteklenmemektedir.

Bu, hangi biçim formatını kullanmanız gerektiğini anlamak için harika bir kaynaktır:

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

Evet, demek istediğim, deneme sürecin aksine basit olabilir

"2014/10/13 23:57:52" onun yerine "2014-10-13 23:57:52"


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);

0

Bu kodu kullanın: (benim sorunum bu kod ile çözüldü)

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;

}


3
lütfen cevabınızı açıklayınız
Mazz

date1 ve date2 parametrelerinin tarih hakkı biçiminde olması gerekir.
Fetra

diff adlı işlev dönüş tarihi. Gün sayısını döndürmek istiyorsanız sadece şunu yapın: var results = dateDiff (tarih1, tarih2); var day_number = sonuç.gün; kolay
Fetra

0

Sunucudan tarih dizeleri aldığımda kullandığım yeniden kullanılabilir bir işlev yazdı. yöntemi
kullanmak için gün ayını ve yılı ayıran istediğiniz sınırlayıcıyı (/ - vb.) geçirebilirsiniz split().
bu çalışma örneğinde görebilir ve test edebilirsiniz .

<!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>

0

Bunu yapmanın başka bir yolu da biçim dizesi üzerinde adlandırılmış yakalama gruplarıyla bir normal ifade oluşturmak ve daha sonra tarih dizesinden gün, ay ve yılı ayıklamak için bu normal ifadeyi kullanmaktır:

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


güzel bir çözüm, ancak Firefox'un RegExp adlı grupları hala desteklemediğinin farkında değilsiniz - bugzilla.mozilla.org/show_bug.cgi?id=1362154 (PS: Cevabınızı reddeden benim değilim)
qdev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.