source

dd-mm-yyy 문자열을 최신 상태로 변환합니다.

gigabyte 2022. 9. 13. 22:06
반응형

dd-mm-yyy 문자열을 최신 상태로 변환합니다.

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

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

("#datepicker").val()에는 dd-mm-yyy 형식의 날짜가 포함되어 있습니다.다음을 수행하면 "유효하지 않은 날짜"가 표시됩니다.

alert(f);

이게 '-' 기호 때문인가요?어떻게 극복해야 할까요?

"-"로 분할

문자열을 필요한 부분으로 해석합니다.

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

regex 사용

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

regex를 사용하면 어떨까요?

하이픈으로 구분된 세 부분으로 구성된 스트링을 작업하게 될 것이기 때문입니다.

단, 다른 문자열 내에서 동일한 문자열을 찾고 있다면 regex를 사용하는 것이 좋습니다.

재사용하다

샘플 코드 및 코드 베이스의 다른 부분에서 여러 번 이 작업을 수행하므로 함수로 마무리합니다.

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

최신 JavaScrivate

좀 더 현대적인 JS를 사용할 수 있다면 어레이 파괴도 손색이 없습니다.

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

정규 표현의 예:

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

또 다른 가능성:

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

숫자를 일치시키고 다시 정렬합니다.

moment.js를 사용한 예:

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

다음 형식을 사용합니다.myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00

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

날짜를 괄호 안에 쓸 수도 있습니다.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)

저 같은 경우에는

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

결과: 2015년 11월 2일 (월)04:40:13 GMT+0100 (CET)다음으로 .getTime()을 사용하여 밀리초를 처리합니다.

받아들여진 답변에는 일종의 버그가 있다.

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
}

외부 라이브러리를 사용하면 도움이 됩니다.

http://www.mattkruse.com/javascript/date/source.html

getDateFromFormat(val,format);

다음 항목도 참조하십시오.JavaScript의 DateTime 문자열 해석

Datejs에서 데이트와 관련된 모든 사소한 문제를 살펴보십시오.parseDate 함수에서도 해결할 수 있습니다.

다음 작업을 수행할 수 있습니다.

var f = new Date(from.split('-').reverse().join('/'));

let dateString  = '13-02-2021' //date string in dd-mm-yyyy format

let dateArray = dateString.split("-");
//dateArray[2] equals to 2021
//dateArray[1] equals to 02
//dateArray[0] equals to 13

// using template literals below

let dateObj = new Date(`${dateArray[2]}-${dateArray[1]}-${dateArray[0]}`);

// dateObj equals to Sat Feb 13 2021 05:30:00 GMT+0530 (India Standard Time)

//I'm from India so its showing GMT+0530

추신: 기본, MDN 또는 DevDocs에 대해서는 항상 문서를 참조해 주십시오.

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)
    );
}
new Date().toLocaleDateString();

js Date Object에 날짜를 전달하기만 하면 됩니다.

언급URL : https://stackoverflow.com/questions/7151543/convert-dd-mm-yyyy-string-to-date

반응형