JavaScript에서 ISO 날짜를 날짜 형식 yyyy-mm-dd로 변환


109

ISO 8601 날짜 에서 yyyy-mm-dd 형식의 날짜를 얻으려면 어떻게 해야합니까?

내 8601 데이트는

2013-03-10T02:00:00Z

다음을 어떻게 얻을 수 있습니까?

2013-03-10

2
실제로 시도해 보셨습니까? 이것은 여러 번 답변 된 새로운 질문이 아닙니다.
bPratik


14
date.split("T")[0]할 것
Aravindh Gopi에게

답변:


100

이 시도

date = new Date('2013-03-10T02:00:00Z');
date.getFullYear()+'-' + (date.getMonth()+1) + '-'+date.getDate();//prints expected format.

최신 정보:-

주석에서 지적했듯이 필요한 경우 날짜와 월에 선행 0을 인쇄하도록 답변을 업데이트하고 있습니다.

date = new Date('2013-08-03T02:00:00Z');
year = date.getFullYear();
month = date.getMonth()+1;
dt = date.getDate();

if (dt < 10) {
  dt = '0' + dt;
}
if (month < 10) {
  month = '0' + month;
}

console.log(year+'-' + month + '-'+dt);


17
참고, 나는이 앞에 0 일 또는 월 인쇄됩니다 생각하지 않는다
user3413723

2
이 YYYY-MM-DD 형식의 요구 사항을 충족하지 않는 따라서 0을 선두 제거하기 때문에이 질문에 대답하지 않습니다 @ user3413723에 동의
제임스 머피

근무 미세의 @Mritunjay
라비 Delixan

이것은 DriveByPoster의 답변에 비해 더 길고 오타가 발생하기 쉽습니다. 그러나 언어에 구애받지 않기 때문에 반대표를주지 않을 것입니다. 우리가 처리 할 수있는 간단한 도구를 사용하지 않습니다.
RoboticRenaissance

2013 년 3 1이 형식의 날짜를 새 날짜로 전달하는 방법을 알려주세요 (날짜)
Kapil soni

143

문자열을 자르십시오.

var date = new Date("2013-03-10T02:00:00Z");
date.toISOString().substring(0, 10);

또는 문자열에서 날짜 만 필요한 경우.

var strDate = "2013-03-10T02:00:00Z";
strDate.substring(0, 10);

3
나는 이것이 그들 모두로부터 가장 쉽고 우아한 해결책이라고 생각하지만 여기에 대한 몰락이 있습니까?
Aida_Aida

30
@Aida_Aida 제가 생각할 수있는 유일한 문제는 코드가 향후 8000 년 이상의 지질 학적 규모의 시간을 다룰 경우 형식이 YYYYY-MM-DD10000 년 이 될 것이기 때문에 코드가 손상 될 수 있다는 것 입니다.이를 방지하려면 T대신 문자. ( en.wikipedia.org/wiki/Year_10,000_problem 참조 )
apsillers

9
이 방법은 ISOString이 UTC이지만 Date 객체는 로컬이기 때문에 시간대를 올바르게 처리하지 못합니다. 이것을 고려해야합니다.
Guillaume F.

3
@GuillaumeF. 이 OP의 요구 사항을 준수 않는 중요한 고려 사항이지만
jamesjansson

문자열이 날짜로 구문 분석되어야하는 이유를 이해할 수 없습니다. 하위 문자열 옵션은 가장 간단한 해답이 될 것으로 보인다.
RobG

46

당신은 체크 아웃 할 수 Moment.js , Luxon , 최신 FNS 또는 Day.js을 좋은 날짜 조작을 위해.

또는 ISO 문자열의 첫 부분 만 추출하면 원하는 내용이 이미 포함되어 있습니다. 여기 의해 예는 분할 온은 T:

"2013-03-10T02:00:00Z".split("T")[0] // "2013-03-10"

15

Moment.js 는 날짜 형식을 처리합니다. 다음은 JavaScript 태그를 통해 포함하는 방법과 날짜 형식을 지정하기 위해 Moment.js를 사용하는 방법의 예입니다.

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

moment("2013-03-10T02:00:00Z").format("YYYY-MM-DD") // "2013-03-10"

이 코드 스 니펫은 질문을 해결할 수 있지만 설명을 포함하면 게시물의 품질을 개선하는 데 실제로 도움이됩니다. 앞으로 독자를위한 질문에 답하고 있으며, 해당 사용자는 코드 제안 이유를 모를 수 있습니다. 또한 코드와 설명의 가독성을 떨어 뜨리므로 설명 주석으로 코드를 혼잡하게 만들지 마십시오!
안녕 StackExchange

2
moment서식을 지정하는 데 사용할 수있는 매우 거대한 라이브러리입니다. 오히려 크기가 훨씬 작고 동일한 기능을 제공하는 date-fns 를 사용하십시오.
Hozefa

@Hozefa, 그런 다음 솔루션으로 OP 질문에 답하십시오.
해리스

1
@Harris-원활하게 작업했습니다!
HadidAli

I 소원의 순간과 같은 몇 가지 기능을 가지고 .toISODateString()는 ... 매우 빈번한 경우이기 때문에,
레프 Lukomsky을

12

이것은 내가 날짜 만 얻는 것입니다.

let isoDate = "2013-03-10T02:00:00Z";

alert(isoDate.split("T")[0]);


2
이것은 실제로 split () 아이디어를 대답 대답으로 제안하는 첫 번째 대답이며 내가 할 수있는 모든 곳에서 moment ()를 사용하지만 노력 대 신뢰성 대 효과적인 요인에 대한 해결책을 좋아합니다.
rainabba

1
toISOString은 UTC를 사용하므로 자정부터 현지 시간대 오프셋 기간 동안 잘못된 현지 날짜가 생성됩니다. – RobG
Michael Dimmitt

9

Moment.js 는 단일 사용 사례에 사용할 수있는 매우 큰 라이브러리입니다. date-fns대신 사용 하는 것이 좋습니다 . 기본적으로 번들 크기가 훨씬 작고 formatting options.

import format from 'date-fns/format'
format('2013-03-10T02:00:00Z', 'YYYY-MM-DD'); // 2013-03-10, YYYY-MM-dd for 2.x

한 가지 주목할 점은 ISO 8601 시간 형식이므로 브라우저는 일반적으로 UTC 시간에서 현지 시간대로 변환합니다. 이것은 당신이 아마 할 수있는 간단한 사용 사례이지만 '2013-03-10T02:00:00Z'.substring(0, 10);.

더 복잡한 변환 date-fns은 갈 길입니다.


6

let isoDate = "2013-03-10T02:00:00Z";
var d = new Date(isoDate);
d.toLocaleDateString('en-GB'); // dd/mm/yyyy
d.toLocaleDateString('en-US'); // mm/dd/yyyy


d.toLocaleDateString ( 'en-GB'); 매력처럼 작동합니다. 좋은 대답입니다!
Donald Shahini


4

그러면 YYYY-MM-DD 형식으로 날짜가 출력됩니다.

let date = new Date();
date = date.toISOString().slice(0,10);

왜 이것이 더 많은 표를 얻지 못하는지 모르겠습니다. 완벽하게 작동했으며 최소한의 노력으로 질문에 답변했습니다
Wolfiebae

4

날짜 개체에 날짜를 전달하십시오.

var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');

1
toLocaleDateString ()은 "/"형식으로 제공됩니다. "-"형식이 아닙니다.
TechCrunch

위의 "/"를 "-"로 대체하여 사용할 수 있습니다. 가장 우아한 아니지만 toLocaleDateString 이제까지 변경하는 경우
제임스 머피

toLocaleDateString 의 결과는 모든 사용자에게 일관되지 않으므로 OP에 필요한 결과를 생성하지 못할 수 있습니다.
RobG

4

날짜를 얻기 위해 분할, 슬라이스 및 기타 문자열 기반 시도를 사용하는 모든 사람들에게 시간대 관련 실패에 대해 스스로 설정할 수 있습니다!

ISO-String에는 Zulu-Timezone과이 시간대에 따른 날짜가 있습니다. 즉, 변환 체인에서 고려해야하는 실제 시간대보다 하루 전 또는 그 이후의 날짜를 사용할 수 있습니다.

이 예를 참조하십시오.

const timeZoneRelatedDate = new Date(2020, 0, 14, 0, 0);

console.log(timeZoneRelatedDate.toLocaleDateString(
    'ja-JP', 
    {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit'
    }
).replace(/\//gi,'-'));

// RESULT: "2020-01-14"

console.log(timeZoneRelatedDate.toISOString());

// RESULT: "2020-01-13T23:00:00.000Z" (for me in UTC+1)

console.log(timeZoneRelatedDate.toISOString().slice(0,10));

// RESULT: "2020-01-13"

3

날짜 개체가있는 경우 :

let date = new Date()
let result = date.toISOString().split`T`[0]

console.log(result)

또는

let date = new Date()
let result = date.toISOString().slice(0, 10)

console.log(result)


1
toISOString 은 UTC를 사용하므로 자정부터 현지 시간대 오프셋 기간 동안 잘못된 현지 날짜가 생성됩니다.
RobG

1

rk rk 의 솔루션 을 확장하려면 : 형식에 시간을 포함하려면 toTimeString()을 문자열에 추가 한 다음 다음과 같이 GMT 부분을 제거 할 수 있습니다 .

var d = new Date('2013-03-10T02:00:00Z');
var fd = d.toLocaleDateString() + ' ' + d.toTimeString().substring(0, d.toTimeString().indexOf("GMT"));

0

나는 이것을 사용했다 :

HTMLDatetoIsoDate(htmlDate){
  let year = Number(htmlDate.toString().substring(0, 4))
  let month = Number(htmlDate.toString().substring(5, 7))
  let day = Number(htmlDate.toString().substring(8, 10))
  return new Date(year, month - 1, day)
}

isoDateToHtmlDate(isoDate){
  let date = new Date(isoDate);
  let dtString = ''
  let monthString = ''
  if (date.getDate() < 10) {
    dtString = '0' + date.getDate();
  } else {
    dtString = String(date.getDate())
  }
  if (date.getMonth()+1 < 10) {
    monthString = '0' + Number(date.getMonth()+1);
  } else {
    monthString = String(date.getMonth()+1);
  }
  return date.getFullYear()+'-' + monthString + '-'+dtString
}

출처 : http://gooplus.fr/en/2017/07/13/angular2-typescript-isodate-to-html-date/



0
let dt = new Date('2013-03-10T02:00:00Z');
let dd = dt.getDate();
let mm = dt.getMonth() + 1;
let yyyy = dt.getFullYear();

if (dd<10) {
    dd = '0' + dd;
}
if (mm<10) {
    mm = '0' + mm;
}
return yyyy + '-' + mm + '-' + dd;

0

@Hozefa 의 더 나은 답변 버전 .

당신이 경우 date-fns설치, 당신은 사용할 수 formatISO의 기능을

const date = new Date(2019, 0, 2)
import { formatISO } from 'date-fns'
formatISO(date, { representation: 'date' }) // '2019-01-02' string

-4

아래 코드를 사용하십시오. 당신에게 유용합니다.

let currentDate = new Date()
currentDate.toISOString()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.