dd-mm-yyyy 문자열을 날짜로 변환


184

다음을 사용하여 dd-mm-yyyy 형식의 문자열을 JavaScript의 날짜 객체로 변환하려고합니다.

 var from = $("#datepicker").val();
 var to = $("#datepickertwo").val();
 var f = new Date(from);
 var t = new Date(to);

("#datepicker").val()dd-mm-yyyy 형식의 날짜를 포함합니다. 다음을 수행하면 "잘못된 날짜"가 표시됩니다.

alert(f);

'-'기호 때문입니까? 이걸 어떻게 극복 할 수 있습니까?


이것은 모든 날짜 또는 특정 날짜에서 발생합니까?
kasdega

답변:


326

"-"로 분할

문자열을 필요한 부분으로 구문 분석하십시오.

var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])

정규식 사용

var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))

왜 정규식을 사용하지 않습니까?

하이픈으로 구분 된 세 부분으로 구성된 문자열을 작업한다는 것을 알고 있기 때문입니다.

그러나 다른 문자열 내에서 동일한 문자열을 찾고 있다면 정규식을 사용하는 것이 좋습니다.

재사용

샘플 코드에서 또는 코드베이스의 다른 곳에서이 작업을 두 번 이상 수행하므로 함수로 묶으십시오.

function toDate(dateStr) {
  var parts = dateStr.split("-")
  return new Date(parts[2], parts[1] - 1, parts[0])
}

다음과 같이 사용 :

var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)

또는 함수에서 jQuery를 신경 쓰지 않으면 :

function toDate(selector) {
  var from = $(selector).val().split("-")
  return new Date(from[2], from[1] - 1, from[0])
}

다음과 같이 사용 :

var f = toDate("#datepicker")
var t = toDate("#datepickertwo")

현대 JavaScript

좀 더 현대적인 JS를 사용할 수 있다면 배열 파괴는 좋은 터치입니다.

const toDate = (dateStr) => {
  const [day, month, year] = dateStr.split("-")
  return new Date(year, month - 1, day)
}

9
나를 이길 ...하지만 여전히 DateJ를 사용합니다. 펜스 포스트 오류로 인해 정확하게 올바르지 않습니다. 월은 0-11이므로 1을 빼야합니다. f = new Date (from [2], from [1] -1, from [0]);
kasdega

12
잘못된 날짜를 생성하는 버그로 선택된 답변. 대박!
epascarello

3
Cheers @kasdega-Edited it ... 잠시 전!
Adrian Lynch

@AdrianLynch 자바 스크립트에서 "Month dd, yyyy"를 "MM / dd / yyyy"로 변환하는 방법은 무엇입니까?
dilipkumar1007

1
@Adrian Lynch Modern JavaScript 옵션이 훌륭합니다! 감사합니다.
Alexandre Ribeiro

134

정규식 예 :

new Date( "13-01-2011".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );

8
또한 개정판 /은 구분자와 1 자리가 2 자리 (또는 1보다 큰 수)로 구성됩니다.replace( /(\d{2})[-/](\d{2})[-/](\d+)/, "$2/$1/$3")
Izhaki

1
이것이 왜 @AdemirNuno의 답변입니까? 알려진 형식의 문자열에 RegEx를 사용하는 이유는 무엇입니까? 패턴을 찾지 않고 첫 번째 숫자는 요일, 두 번째는 월, 세 번째는 년이라는 것을 알고 있습니다. 이 경우 RegEx는 작업에 잘못된 도구입니다.
Adrian Lynch

숫자가 아닌 구분 기호, 선행 0이없는 날짜 및 2 또는 4 자리 연도를 사용하는 개정 : new Date( "23. 2. 15".replace( /(\d+)[^d]+(\d+)[^d]+(\d+)/, "$2/$1/$3") ); en.wikipedia.org/wiki/Date_format_by_country
PaulH

연습하는 사람이에요, 고마워요 내 날짜 형식은 시간과 함께 제공되므로 'new Date ( "13-01-2011".replace (/ (\ d {2})-(\ d {2})-(\ w) / , "$ 2 / $ 1 / $ 3")); ' 맞아?
Kamuran Sönecek

@NeerajSingh 자바 스크립트에서 "Month dd, yyyy"을 "MM / dd / yyyy"로 변환하는 방법?
dilipkumar1007

15

또 다른 가능성 :

var from = "10-11-2011"; 
var numbers = from.match(/\d+/g); 
var date = new Date(numbers[2], numbers[0]-1, numbers[1]);

숫자를 일치시키고 순서를 바꿉니다


또한 원래 질문은 "mm-dd-yyyy"가 아닌 "dd-mm-yyyy"를 지정 했으므로 여전히 잘못되었습니다 (단지).
Phil M Jones

@epascarello 자바 스크립트에서 "Month dd, yyyy"를 "MM / dd / yyyy"로 변환하는 방법?
dilipkumar1007

1
var date = new Date(numbers[2], numbers[1]-1, numbers[0]);
Rui Nunes

7

moment.js 예제 사용 :

var from = '11-04-2017' // OR $("#datepicker").val();
var milliseconds = moment(from, "DD-MM-YYYY").format('x');
var f = new Date(milliseconds)

1
moment (from, "DD-MM-YYYY"). toDate ()
Lapenkov Vladimir

6
var from = $("#datepicker").val(); 
var f = $.datepicker.parseDate("d-m-Y", from);

3
Date.parseDate를 받고 있습니까?
kasdega

@kasdega 죄송합니다, $ .datepicker.parseDate을 생각하고있었습니다. 지금 고치 셨습니다 :)
Saad Imran.

api.jqueryui.com/datepicker의 chek datepicker 문서 $.datepicker.parseDate("dd-mm-yy", from);와 같은 날짜를 올바르게 구문 분석하는 데 사용해야 합니다.24-01-2017
Andrea Mauro

4

Date()다음과 같이 객체 의 괄호 안에 날짜를 쓸 수도 있습니다 .

new Date("Month dd, yyyy hh:mm:ss")
new Date("Month dd, yyyy")
new Date(yyyy,mm,dd,hh,mm,ss)
new Date(yyyy,mm,dd)
new Date(milliseconds)

@AmitSengar Javascript에서 "Month dd, yyyy"를 "MM / dd / yyyy"로 변환하는 방법은 무엇입니까?
dilipkumar1007

3

이 형식을 사용하십시오. myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00


1
parseDate기능은 어디서 얻었 습니까? 이것이 기본 자바 스크립트 함수입니까?
Joseph Silber

죄송합니다 어떻게 구현합니까? 또한 나는 DD-MM-YY로 포맷해야합니다
user559142

parseDate는 기본 JS 함수입니다. 자세한 내용은 다음을 참조하십시오 : xaprb.com/articles/javascript-date-parsing-demo.html
Diodeus-James MacFarlane

1
@ Diodeus ... 정말 네이티브입니까? ff와 chrome은 어떻게 오류를 던지나요?
epascarello

2
@Diodeus는 마지막 편집으로도 나에게 적합하지 않습니다 (최소한 Chrome에서는). 날짜를 '2011-01-03'UTC 시간으로 설정합니다 00:00:00. 따라서 사용자의 시간대가 UTC보다 작 으면 실제로 전날이됩니다.
Mike

3

나의 경우에는

new Date("20151102034013".replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3T$4:$5:$6"))

결과 : Mon Nov 02 2015 04:40:13 GMT + 0100 (CET) 그런 다음 .getTime ()을 사용하여 밀리 초로 작업하십시오.


3

허용되는 답변에 버그가 있습니다.

var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])

날짜 선택 도구에 "77-78-7980"이 포함되어 있는지 확인하십시오. 이는 유효한 날짜가 아닙니다. 결과는 다음과 같습니다.

var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z

아마도 원하는 결과가 아닙니다.

그 이유는 MDN 사이트 에 설명되어 있습니다.

Date가 둘 이상의 인수가있는 생성자로 호출되는 경우 값이 논리 범위보다 큰 경우 (예 : 13은 월 값으로 제공되거나 분 값은 70으로 제공됨) 인접한 값이 조정됩니다. 예 new Date(2013, 13, 1)를 들어와 같습니다 new Date(2014, 1, 1).


문제를 해결하는 더 좋은 방법은 다음과 같습니다.

const stringToDate = function(dateString) {
  const [dd, mm, yyyy] = dateString.split("-");
  return new Date(`${yyyy}-${mm}-${dd}`);
};

console.log(stringToDate('04-04-2019'));
// Date 2019-04-04T00:00:00.000Z

console.log(stringToDate('77-78-7980'));
// Invalid Date

이를 통해 유효하지 않은 입력을 처리 할 수 ​​있습니다.

예를 들면 다음과 같습니다.

const date = stringToDate("77-78-7980");

if (date === "Invalid Date" || isNaN(date)) {
  console.log("It's all gone bad");
} else {
  // Do something with your valid date here
}


1

모든 소소한 날짜 관련 문제에 대해서는 Datejs 를 살펴보십시오 . parseDate 함수로도 해결할 수 있습니다.


0

Regexp를 사용할 수 있습니다.

var result = /^(\d{2})-(\d{2})-(\d{4})$/.exec($("#datepicker").val());
if (result) {
    from = new Date(
        parseInt(result[3], 10), 
        parseInt(result[2], 10) - 1, 
        parseInt(result[1], 10)
    );
}

잘못된 달을 만듭니다! 월은 1이 아닌 0에서 시작합니다. 당신이 1 월을했다면, 당신은 2 월이라고 말할 것입니다.
epascarello

1
@epascarello-Date API가 얼마나 절름 발인지 잊어 버렸습니다.
ChaosPandion

@ChaosPandion : myDate = '20 / 06 / 17 '을 자바 스크립트에서 '20 / 6 / 2017 00:00:00'형식으로 변환하는 방법은 무엇입니까?
Ghanshyam Lakhani

-1
new Date().toLocaleDateString();

간단하게 날짜를 js Date Object에 전달하십시오.


날짜 생성자 안에 날짜 문자열을 전달하는 것을 의미합니까 new Date('30/12/2018').toLocaleDateString()? 유효하지 않은 날짜를 반환합니다.
Ms.Tamil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.