[javascript] JavaScript에서 날짜 형식에 대한 설명서를 어디서 찾을 수 있습니까? [닫은]

JavaScript의 new Date()기능이 여러 형식의 날짜를 수락하는 데 매우 똑똑 하다는 것을 알았습니다 .

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

new Date()함수 를 호출하는 동안 유효한 문자열 형식을 모두 보여주는 문서를 찾을 수 없습니다 .

문자열을 날짜로 변환하기위한 것입니다. 반대편을 보면, 즉 날짜 객체를 문자열로 변환하면 지금까지 JavaScript에 날짜 객체를 문자열로 형식화하는 내장 API가 없다는 인상을 받았습니다.

편집자 주 : 다음 접근 방식은 특정 브라우저 에서 작동 했지만 일반적으로 작동 하지 않는 시도 자의 시도입니다 . 실제 해결책을 보려면 이 페이지의 답변 을 참조하십시오.

오늘 toString()은 날짜 객체 에서 메소드를 사용하여 놀았으며 놀랍게도 날짜를 문자열로 형식화하는 용도로 사용됩니다.

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

또한 날짜 객체를 문자열로 포맷 할 수있는 모든 방법에 대한 문서를 찾을 수 없었습니다.

Date()객체가 지원하는 형식 지정자를 나열한 설명서는 어디에 있습니까 ?



답변

내가 좋아하는 자바 스크립트를 사용하여 형식의 시간과 날짜에 대한 10 가지 방법날짜에 작업을 .

기본적으로 세 가지 방법이 있으며 문자열을 직접 결합해야합니다.

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

예:

var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
console.log(curr_date + "-" + curr_month + "-" + curr_year);


답변

Moment.js

날짜 구문 분석, 조작 및 형식 지정을위한 (경량) * JavaScript 날짜 라이브러리입니다.

var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA");                       // "Sun, 3PM"

(*) 가벼운 의미 9.3KB 축소 및 가능한 가장 작은 설정에서 gzipped (2014 년 2 월)


답변

프로젝트에서 이미 jQuery UI 를 사용중인 경우 내장 날짜 선택 도구를 사용하여 날짜 객체의 형식을 지정할 수 있습니다.

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

그러나 날짜 선택기는 날짜 만 형식화하고 시간은 형식화 할 수 없습니다.

jQuery UI datepicker formatDate 예제를 살펴보십시오 .


답변

Date()객체가 지원하는 형식 지정자를 나열한 설명서는 어디에 있습니까 ?

나는 오늘 이것을 우연히 발견했으며 아무도이 간단한 질문에 대답하는 데 시간이 걸리지 않았다는 사실에 놀랐습니다. 사실 날짜 조작을 도와주는 라이브러리가 많이 있습니다. 일부는 다른 것보다 낫습니다. 그러나 그것은 질문이 아니었다.

AFAIK, 순수 JavaScript는 형식 지정자를 사용 하려는 방식을 지원하지 않습니다 . 그러나 같은 날짜 및 / 또는 시간을, 포맷에 대한 지원 방법을 수행 .toLocaleDateString(), .toLocaleTimeString().toUTCString().

Date내가 가장 자주 사용 하는 객체 참조는 w3schools.com 웹 사이트에 있습니다. 그러나 빠른 Google 검색 은 귀하의 요구를 더 잘 충족시킬 수있는 더 많은 정보를 제공합니다.

또한 날짜 개체 속성 섹션은에 대한 링크를 제공합니다.이 링크 prototype는 사용자 지정 방법으로 날짜 개체를 확장 할 수있는 몇 가지 방법을 보여줍니다. 수년에 걸쳐 JavaScript 커뮤니티에서 이것이 모범 사례인지 아닌지에 대한 논쟁 이 있었으며 , 나는 그것이 존재하는지 지적하면서 그것을 주장하거나 반대하지 않습니다.


답변

맞춤 형식 지정 기능 :

고정 형식의 경우 간단한 기능으로 작업이 가능합니다. 다음 예는 국제 형식 YYYY-MM-DD를 생성합니다.

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

참고 : 그러나 일반적으로 Javascript 표준 라이브러리를 확장하는 것은 좋지 않습니다 (예 :이 함수를 Date 프로토 타입에 추가).

보다 고급 기능은 형식 매개 변수를 기반으로 구성 가능한 출력을 생성 할 수 있습니다. 이 같은 페이지에는 몇 가지 좋은 예가 있습니다.

포맷팅 함수를 작성하는 것이 너무 길면, 그 주위에 많은 라이브러리가 있습니다. 다른 답변은 이미 열거했습니다. 그러나 의존성이 증가함에 따라 이에 대한 대응도 이루어지고 있습니다.

표준 ECMAScript 형식화 기능 :

최신 버전의 ECMAscript 이후 Date클래스에는 몇 가지 특정 형식화 기능이 있습니다.

toDateString : 구현에 따라 다르며 날짜 만 표시하십시오.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString : ISO 8601 날짜 및 시간을 표시합니다.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON : JSON 용 문자열입니다.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString : 구현에 따라 다르며 로캘 형식의 날짜입니다.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString : 구현에 따라 달라 지며 날짜 및 시간은 로캘 형식입니다.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString : 구현에 따라 다르며 로케일 형식의 시간입니다.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString : Date의 일반 toString입니다.

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

참고 : 이러한 형식 지정 기능에서 사용자 정의 출력을 생성 할 수 있습니다.

new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD


답변

짧은 대답

자바 스크립트가 제공하는 “범용”문서는 없습니다. 자바 스크립트가있는 모든 브라우저는 실제로 구현입니다. 그러나 대부분의 최신 브라우저가 따르는 경향이 있으며 이것이 EMCAScript 표준입니다. ECMAScript 표준 문자열에는 최소한 ISO 8601 정의의 수정 된 구현이 필요합니다.

이 외에도, IETF 가 브라우저가 따르는 경향 이있는 두 번째 표준 이 있는데, 이는 RFC 2822에서 작성된 타임 스탬프에 대한 정의입니다. 실제 문서는 하단의 참조 목록에서 찾을 수 있습니다.

이것으로부터 기본 기능을 기대할 수 있지만“필요한”것은 본질적으로“있는”것이 아닙니다. 비록 세 사람 만이 실제로 질문에 답한 것처럼 보이므로 (Scott, goofballLogic 및 peller), 나는 대부분의 사람들이 당신이 실제로 일어날 때 어떤 일이 일어나고 있는지 알지 못하기 때문에 나는이 절차에 대해 조금 더 깊이 갈 것입니다. Date 객체를 만듭니다.


긴 대답

Date () 객체가 지원하는 형식 지정자를 나열한 설명서는 어디에 있습니까?

질문에 대답하거나 일반적으로이 질문에 대한 답을 찾으려면 자바 스크립트가 새로운 언어가 아님을 알아야합니다. 실제로는 ECMAScript의 구현이며 ECMAScript 표준을 따릅니다 (그러나 Javascript는 실제로 해당 표준보다 먼저 날짜가 지정되었습니다. EMCAScript 표준은 LiveScript / JavaScript의 초기 구현을 기반으로합니다). 현재 ECMAScript 표준은 5.1 (2011)입니다. 질문이 처음 요청되었을 때 (09 년 6 월) 표준은 3 (4 개는 폐기 됨)이지만 2009 년 말에 게시 된 직후 5 개가 릴리스되었습니다. 이는 한 가지 문제를 요약해야합니다. a) 특정 표준의 구현이기 때문에 b) 표준의 모든 구현이 청교도가 아니기 때문에 자바 스크립트 구현이 따르는 표준, 실제로 적용되는 것을 반영하지 않을 수 있음

본질적으로 자바 스크립트를 처리 할 때 구현 (자바 스크립트 자체)의 파생물 (브라우저에 특정한 자바 스크립트)을 처리합니다. 예를 들어 Google의 V8은 ECMAScript 5.0을 구현하지만 Internet Explorer의 JScript는 ECMAScript 표준을 따르지 않지만 Internet Explorer 9는 ECMAScript 5.0을 따릅니다.

단일 인수가 new Date ()에 전달되면이 함수 프로토 타입을 캐스트합니다.

new Date(value)

둘 이상의 인수가 new Date ()에 전달되면이 함수 프로토 타입을 캐스트합니다.

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )

이 두 함수는 모두 친숙해 보일 것이지만, 이것이 바로 귀하의 질문에 대답하지는 않으며 수용 가능한 “날짜 형식”으로 정량화하는 것은 추가 설명이 필요합니다. 문자열을 new Date ()에 전달하면 프로토 타입을 호출합니다 (단어를 사용하고 있음에 유의하십시오) 프로토 타입을 , 버전이 각각의 기능이 될 수도 있고, 하나의 함수에서 조건문의 일부가 될 수 느슨하게)를위한 문자열을 “value”매개 변수의 인수로 사용하는 새 날짜 (값) . 이 함수는 먼저 숫자인지 문자열인지 확인합니다. 이 기능에 대한 설명서는 다음에서 찾을 수 있습니다.

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

이를 통해 새로운 Date (value)에 허용되는 문자열 형식을 얻으려면 Date.parse (string) 메소드를 확인해야합니다. 이 방법에 대한 설명서는 다음에서 찾을 수 있습니다.

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

또한 날짜가 여기에 지정된대로 수정 된 ISO 8601 확장 형식 일 것으로 예상 할 수 있습니다.

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

그러나 Javascript의 Date 객체가 다른 형식을 허용한다는 것을 경험을 통해 알 수 있습니다 (처음 에이 질문이 존재 함) ECMAScript는 구현 특정 형식을 허용하기 때문에 괜찮습니다. 그러나 여전히 사용 가능한 형식으로 제공되는 설명서 또는 실제로 허용되는 형식에 대한 질문에는 대답하지 않습니다. Google의 자바 스크립트 구현 인 V8을 살펴 보겠습니다. 나는 이것이 “최상의”자바 스크립트 엔진 ( “최상의”또는 “좋은”을 어떻게 정의 할 수 있는지)을 제안하지는 않으며 V8에서 허용되는 형식이 오늘날 사용 가능한 모든 형식을 나타낼 것이라고 가정 할 수는 없지만 공정하다고 생각합니다 그들이 현대의 기대를 따르고 있다고 가정합니다.

구글의 V8, date.js, DateConstructor

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

DateConstructor 함수를 살펴보면 DateParse 함수를 찾아야한다고 추론 할 수 있습니다. 그러나 “year”는 실제 연도가 아니며 “year”매개 변수에 대한 참조 일뿐입니다.

구글의 V8, date.js, DateParse

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

이것은 실제로 C ++ 함수에 대한 런타임 함수 참조 인 % DateParseString을 호출합니다. 다음 코드를 참조하십시오.

Google의 V8, runtime.cc, % DateParseString

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

이 함수와 관련하여 함수 호출은 DateParser :: Parse (); 해당 함수 호출을 둘러싼 논리를 무시하십시오. 이는 인코딩 유형 (ASCII 및 UC16)을 준수하는지 확인하는 것입니다. DateParser :: Parse는 여기에 정의되어 있습니다.

Google의 V8, dateparser-inl.h, DateParser :: Parse

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

실제로 어떤 형식을 허용하는지 정의하는 함수입니다. 기본적으로 EMCAScript 5.0 ISO 8601 표준을 확인하고 표준을 준수하지 않는 경우 레거시 형식을 기반으로 날짜를 작성하려고 시도합니다. 의견을 바탕으로 몇 가지 핵심 사항 :

  1. 파서에 알려지지 않은 첫 번째 숫자 앞의 단어는 무시됩니다.
  2. 괄호 안의 텍스트는 무시됩니다.
  3. 부호없는 숫자 다음에 “:”은 “시간 구성 요소”로 해석됩니다.
  4. 부호없는 숫자 다음에 “.” “시간 구성 요소”로 해석되며 밀리 초 뒤에 와야합니다.
  5. 부호있는 숫자 다음에시 또는 분 (예 : +5 : 15 또는 +0515)이 시간대로 해석됩니다.
  6. 시간과 분을 선언 할 때“hh : mm”또는“hhmm”을 사용할 수 있습니다.
  7. 시간대를 나타내는 단어는 시간대로 해석됩니다.
  8. 다른 모든 숫자는“날짜 구성 요소”로 해석됩니다.
  9. 한 달의 처음 세 자리 숫자로 시작하는 모든 단어는 해당 월로 해석됩니다.
  10. “hh : mm”또는 “hhmm”의 두 가지 형식 중 하나로 분과 시간을 함께 정의 할 수 있습니다.
  11. 숫자가 처리 된 후에는 “+”, “-“및 일치하지 않는 “)”와 같은 기호를 사용할 수 없습니다.
  12. 여러 형식 (예 : 1970-01-01)과 일치하는 항목은 표준 호환 EMCAScript 5.0 ISO 8601 문자열로 처리됩니다.

따라서 이것은 문자열을 Date 객체에 전달할 때 예상되는 것에 대한 기본 아이디어를 제공하기에 충분해야합니다. Mozilla가 Mozilla Developer Network에서 가리키는 다음 스펙 (IETF RFC 2822 타임 스탬프 준수)을 살펴보면 추가로 확장 할 수 있습니다.

http://tools.ietf.org/html/rfc2822#page-14

Microsoft Developer Network는 Date 객체에 대한 추가 표준 인 ECMAScript 국제화 API 사양 인 ECMA-402 (ECMAScript 5.1 표준 및 이후 표준)를 보완합니다. 여기에서 찾을 수 있습니다.

http://www.ecma-international.org/ecma-402/1.0/

어쨌든, 이것은 모든 자바 스크립트 구현을 보편적으로 나타내는 “문서”가 없다는 것을 강조하는 데 도움이되지만 Date 객체에 어떤 문자열이 허용되는지를 합리적으로 이해할 수있는 충분한 문서가 여전히 남아 있습니다. 당신이 그것에 대해 생각할 때 꽤로드 된 질문입니다. :피

참고 문헌

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://tools.ietf.org/html/rfc2822#page-14

http://www.ecma-international.org/ecma-402/1.0/

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

자원

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx


답변

JavaScript에서 날짜를 다룰 때 Datejs 를 체크 아웃하십시오 . toString 함수의 경우에 볼 수 있듯이 상당히 인상적이고 문서화되어 있습니다 .

편집 : Tyler Forsythe는 datejs가 구식이라고 지적합니다. 나는 현재 프로젝트에서 그것을 사용하고 아무 문제가 없었지만, 당신은 이것을 알고 대안을 고려해야합니다.