JavaScript에서 문자열을 날짜로 변환


668

JavaScript에서 문자열을 날짜로 변환하려면 어떻게해야합니까?

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

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


1
오, 지금 혼란 스러워요. 당신은시겠습니까 Date -> StringString -> Date?
Felix Kling

답변:


827

문자열 구문 분석에 가장 적합한 문자열 형식은 JavaScript Date 객체 생성자와 함께 날짜 ISO 형식입니다.

ISO 형식의 예 : YYYY-MM-DD또는 YYYY-MM-DDTHH:MM:SS.

하지만 기다려! "ISO 형식"을 사용하는 것만으로는 안정적으로 작동하지 않습니다. 문자열은 때때로 UTC로, 때로는 현지 시간으로 (브라우저 공급 업체 및 버전에 따라) 구문 분석됩니다. 모범 사례는 항상 날짜를 UTC로 저장하고 계산을 UTC로하는 것입니다.

UTC로 날짜를 구문 분석하려면 추가 Z - 예를 : new Date('2011-04-11T10:20:30Z').

UTC, 사용 날짜를 표시하려면 .toUTCString(),
사용을 사용자의 로컬 시간에 날짜를 표시 .toString().

MDN에 대한 추가 정보 | 날짜이 대답 .

이전 Internet Explorer 호환성 (9 미만의 IE 버전은 Date 생성자에서 ISO 형식을 지원하지 않음)의 경우 datetime 문자열 표현을 해당 부분으로 분할 한 다음 datetime 부분을 사용하여 생성자를 사용할 수 있습니다 (예 :) new Date('2011', '04' - 1, '11', '11', '51', '00'). 월 수는 1보다 작아야합니다.


다른 방법-적절한 라이브러리를 사용하십시오.

지정된 시간대로 날짜를 구문 분석 할 수있는 Moment.js 라이브러리를 활용할 수도 있습니다 .


또한 Paul Tomblin이 제기 한 동일한 "Nan"문제에 대해 "Salit for the string"방법을 사파리로 사용해야했습니다. new Date ( '2011-04-11 11:51:00')는 '잘못된 날짜'를 반환합니다.
Amos

1
@Amos : 날짜와 시간을 구분하는 문자 T에 주목하십시오. 당신이 작성하는 경우 new Date('2011-04-11T11:51:00')생성 된 날짜가 유효합니다.
Pavel Hodek

불행히도 나는 모든 사용자에게 * 작동하지 않는 문제에 부딪쳤다 .
로마 Podlinov

3
Date에서 문자열을 구문 분석하는 것이 Date 객체를 만드는 가장 나쁜 방법입니다. 문자열을 수동으로 구문 분석하고 Date를 생성자로 호출하는 것이 훨씬 좋습니다. 일부 브라우저는 시간대가없는 ISO 문자열을 UTC로, 다른 브라우저는 로컬로 처리합니다.
RobG

6
@Ben Taliadoros : 예, 모든 일반 브라우저에서 new Date('1970-30-02')유효하지 않습니다. 1 년에 30 개월이 없기 때문에 유효하지 않습니다. 몇 달을 넘길 수는 없지만 며칠을 넘으면 ChromeFirefox 에서 유효한 날짜로 확인됩니다 new Date('1970-02-30').
Pavel Hodek

291

불행히도 나는

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

"2014 년 4 월 2 일 수요일"을 반환합니다. 나는 그것이 미친 것처럼 들리지만 일부 사용자에게는 발생합니다.

방탄 솔루션은 다음과 같다 :

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
전혀 미친 것은 아니지만 조정은 DST 시작으로 인해 발생할 가능성이 큽니다 . 형식의 날짜는 yyyy-MM-ddUTC로 구문 분석되고 toString현지 시간을 반환 하므로 사용자 시간대에 따라 다른 결과를 가장 확실하게 반환 할 수 있습니다. 항상 시간을 UTC로 사용하려면 toUTCString 을 사용해야합니다 .
제임스

이것에 내 머리를 두드리고 있었다. 이것은 작동하는 것처럼 보이지만 파트 [0]이 아닌 파트 [0] -1을 사용한 이유를 이해하지 못합니다.
Adam Youngers

4
@AdamYoungers 자바 스크립트로 인해 0부터 1 월-0, 2 월-1 개월 등으로 계산
Roman Podlinov

1
이 답변은 예제의 동작이 잘못되었음을 나타냅니다. 사양에 따라 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… (: datestring 참조) 예제에서 출력 된 값은 정확합니다
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'));

출력은 다음과 같습니다.

dt => Date {Fri Apr 26 2013}

5
불행히도이 솔루션에는 문제가 있습니다. 세부 사항은 여기에 있습니다 : stackoverflow.com/questions/17959660/…
Roman Podlinov

코드가 문자열로 변환하거나 출력하지 않기 때문에 출력을 알 수 없습니다.
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
미국 형식뿐만 아니라 모든 변형의 날짜를 처리합니다.
Mark Jones

4
@MarkJones이 .indexOf()메소드는 polyfil 없이는 브라우저 간 호환이 아니므로이 메소드를 신뢰하지 마십시오 . 대신, 더 호환 가능 .match()하거나 .test()바닐라 JS 메소드를 사용하십시오.
Alexander Dixon

1
var _delimiter = _format.match(/\W/g)[0];함수의 시작 부분에 추가 하면 구분 기호를 자동으로 가져 와서 세 번째 매개 변수를 가져올 수 있습니다.
campsjos

39

moment.js ( http://momentjs.com/ )는 사용 날짜를위한 완전하고 좋은 패키지이며 ISO 8601 문자열을 지원합니다 .

문자열 날짜와 형식을 추가 할 수 있습니다.

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

날짜가 유효한지 확인할 수 있습니다.

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

일부 표시 예

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

http://momentjs.com/docs/#/parsing/string-format/ 설명서를 참조 하십시오

권장 사항 : 시간대 및 형식 시간 관리가 실제로 큰 문제이기 때문에 순간 js가 많은 형식을 해결하기 때문에 많은 형식을 포함하는 날짜에 패키지를 사용하는 것이 좋습니다. 간단한 문자열에서 날짜까지 쉽게 구문 분석 할 수는 있지만 모든 형식과 날짜 변형을 지원하는 것은 어려운 일이라고 생각합니다.


1
일부 디스플레이 예제 let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL')) 출력 : "3 개월 전 | 2019 년 2 월 1 일"
CPHPython

36

Date ()에 인수로 전달하십시오.

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

다음을 사용하여 날짜, 월, 연도에 액세스 할 수 있습니다 dt.getMonth().


8
console.log(new Date('30-08-2018'))유효하지 않은 날짜를 얻을
Dwigh

이 답변은이 문제에 대한 여러 가지 복잡성을 무시합니다. 예를 들어 01/02/2020영국의 컴퓨터 에서 날짜 를 지정하면 2 월 1 일이 반환되고 미국에서 동일한 일이 마치 1 월 2 일이 반환됩니다. 이 순진한 구현을 사용해서는 안됩니다. 대신에 순간 을 사용하십시오 .
Liam

23

훌륭한 모멘트 라이브러리 (예 : Node.js 프로젝트)를 사용할 수 있다면 예를 들어 날짜를 쉽게 파싱 할 수 있습니다.

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

를 통해 JS 날짜 객체에 액세스 할 수 있습니다

momentDate ().toDate();

5
순간은 노드없이 잘 작동합니다
shaheer

이 코드를 사용하는 동안 Android 및 IOS 장치에서 NaN 오류가 발생했지만 데스크톱에서 작동했습니다. 다음은 이전에 사용한 코드입니다. var dateTimeOfTimeIn = new Date (year + "-"+ month + "-"+ day + "T"+ data.timeIn); 이 접근 방식과 모멘트 라이브러리를 사용하면 문제가 해결되었으며 이제 모든 장치에서 코드가 제대로 작동합니다!
Mehdi

20

new Date(2000, 10, 1) "수 11 월 01 2000 00:00:00 GMT + 0100 (CET)"

월의 0은 1 월을 나타냅니다.


19

작고 똑똑한 솔루션을 찾는 사람들에게 :

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

예:

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

매력처럼 작동합니다! 내 인생 친구를 구했어!
Steve Nosse


12

"dd / MM / yyyy"형식에서 변환하려는 경우 예를 들면 다음과 같습니다.

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

이 솔루션은 9 미만의 IE 버전에서 작동합니다.


12

타임 스탬프는 숫자로 캐스트해야합니다

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
[정보] 어떤 undefined가치인가? 처럼 : var date = new Date(undefined)?
Benny Neugebauer

@BennyNeugebauer는 Date 생성자에 값을 전달하기 전에 값이 정의되어 있지 않은지 확인하십시오. 예외를 던지거나 기본 날짜로 대체하고 싶을 수도 있습니다.
Lucky Soni

9

Date.parse거의 당신이 원하는 것을 얻습니다. am/ pm부분 에 질식이 있지만 일부 해킹으로 작동시킬 수 있습니다.

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 형식으로 변환 :

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

누군가 도와 줘요 !!!



4

js에서 문자열을 날짜로 변환하려면 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 ()는 기본적으로 현재 날짜를 사용합니다. "2016-06-27 17 : 49 : 51.951602 + 05 : 30"형식의 문자열을 모멘트를 사용하여 포맷하는 방법.
Zoran777

4

Date 객체를 UTC Date 객체로 변환하기 위해이 기능을 만들었습니다.

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


dateToUTC(new Date());

3

또 다른 방법 :

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

아! 산뜻한! 마지막으로 사용되는 구분 기호를 처리하는 코드입니다.
샘 시리 (Sam

3

당신은 이것을 시도 할 수 있습니다 :

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

또는

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

'01 -01-1970 '형식의 날짜 문자열은 FireFox에서 작동하지 않으므로 날짜 형식 문자열에서 "-"대신 "/"를 사용하는 것이 좋습니다.


내 문자열은 FF에서 "2015/08/03 13:06:16"떨림입니다. 작동하지 않습니다
Dhara

2

날짜 형식으로 변환하기 전에 문자열의 내용을 확인해야하는 경우 :

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

문자열을 날짜 객체로 변환하는 parseDateTime 함수를 만들었으며 모든 브라우저 (IE 브라우저 포함)에서 작동하고 있으며 필요한 사람이 있는지 확인하십시오 https://github.com/Umesh-Markande/Parse-String-to-Date -올-브라우저

    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)

이것은 나를 위해 일했습니다. 감사합니다.
Christopher D. Emerson

2

이 답변은 Kassem의 답변을 기반으로 하지만 두 자리 연도를 처리합니다. Kassem의 답변에 수정 사항을 제출했지만 승인되지 않은 경우 별도의 답변으로 제출합니다.

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

정규식을 사용하여 문자열을 구문 분석하여 시간을 자세히 분석 한 다음 날짜 또는 다음과 같은 반환 형식을 만들 수 있습니다.

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

공연

오늘 (2020.05.08) 선택한 솔루션에 대한 테스트를 수행합니다. 두 가지 경우 : 입력 날짜는 ISO8601 문자열 (Ad, Bd, Cd, Dd, Ed)이고 입력 날짜는 타임 스탬프입니다 (At, Ct, Dt). 솔루션 Bd, Cd, Ct는 js Date 객체를 결과로 반환하지 않지만 유용 할 수 있기 때문에 추가하지만 유효한 솔루션과 비교하지는 않습니다. 이 결과는 대규모 날짜 구문 분석에 유용 할 수 있습니다.

결론

  • 솔루션 new Date(Ad)은 ISO 날짜 및 타임 스탬프에 대해 모든 브라우저에서 moment.js (Dd)보다 50-100 배 빠릅니다.
  • 솔루션 new Date(Ad)이 parseDate(Ed) 보다 ~ 10 배 빠릅니다.
  • Date.parse모든 브라우저에서 ISO 날짜부터 타임 스탬프를 가져와야하는 경우 솔루션 (Bd)이 가장 빠릅니다.

여기에 이미지 설명을 입력하십시오

세부

Chrome 81.0, Safari 13.1, Firefox 75.0에서 MacOs High Sierra 10.13.6에서 테스트를 수행합니다. 솔루션 parseDate(Ed)은 new Date(0)UTC 날짜 구성 요소를 사용 하고 수동으로 설정합니다.

크롬에 대한 결과

여기에 이미지 설명을 입력하십시오


0

표준만큼 뛰어난 ISO 8601 형식의 날짜 문자열은 여전히 ​​널리 지원되지 않습니다.

이것은 어떤 날짜 문자열 형식을 사용해야하는지 알아내는 데 유용한 리소스입니다.

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

예, 이는 날짜 문자열이 다음과 같이 간단 할 수 있음을 의미합니다.

"2014/10/13 23:57:52" 대신에 "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

이 코드를 사용하십시오 : (이 코드로 문제가 해결되었습니다)

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
답을 설명해주세요
Mazz

date1 및 date2 매개 변수는 날짜 권한 형식이어야합니다.
Fetra

함수 반환 날짜는 diff입니다. 반환되는 일 수를 원하면 다음과 같이하십시오. var result = dateDiff (date1, date2); var day_number = result.day; 쉬움
Fetra

0

서버에서 날짜 문자열을 가져올 때 사용하는 재사용 가능한 함수를 작성했습니다.
split()방법 을 사용하기 위해 일 월과 년을 구분하는 원하는 구분 기호 (/-등)를 전달할 수 있습니다 .
예제 에서 보거나 테스트 할 수 있습니다 .

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

또 다른 방법은 형식 문자열 위에 이름이 지정된 캡처 그룹으로 정규식을 작성한 다음 해당 정규식을 사용하여 날짜 문자열에서 일, 월 및 연도를 추출하는 것입니다.

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


좋은 솔루션,하지만 당신은 아마 파이어 폭스는 여전히 정규식라는 이름의 그룹을 지원하지 않음을 인식하지 못합니다 - bugzilla.mozilla.org/show_bug.cgi?id=1362154을 (PS 그것은 내가 아니라 당신의 대답을 downvoted 누가)
qdev을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.