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
'source' 카테고리의 다른 글
'do'가 필요할 때가 있나요?}, ( )" 루프 중? (0) | 2022.09.13 |
---|---|
자바 추상 인터페이스 (0) | 2022.09.13 |
Log4j2 구성 - log4j2 구성 파일을 찾을 수 없습니다. (0) | 2022.09.12 |
maria db를 사용한 지리 공간 (0) | 2022.09.12 |
Python 3: Unbound Local Error: 할당 전에 참조된 로컬 변수 (0) | 2022.09.12 |