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


1398

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()객체가 지원하는 형식 지정자를 나열한 설명서는 어디에 있습니까 ?


165
: 당신의 예는 실제로 당신이 그들이 생각하는 방식 작동하지 않습니다 jsfiddle.net/edelman/WDNVk/1을
제이슨

27
죄송합니다. toString에 형식 문자열을 전달하면 .NET에서 작동하며 Java에서는 작동 할 수 있지만 Jason이 지적한 것처럼 실제로는 Javascript에서 작동하지 않습니다.
Joshua Carmody

12
사람들은 아무리 정식적인 질문이더라도 질문을 기억 해야합니다 . 이 질문을 답변으로 바꾸는 편집은 삼가십시오 . 대신 답변을 수정하고 유지하십시오 . 감사합니다 :)
팀 포스트

1
이 링크에서 코드를 사용했습니다. msdn.microsoft.com/en-us/library/ie/ff743760(v=vs.94).aspx-(date.toLocaleDateString ( "en-US"));
Khaled Annajar

이 페이지에 미래의 방문자가 답변의 대부분이 질문에 어떻게 관련되는지 혼란스러워하는 경우, 내가 읽고 제안 질문 개정 (위에서 다른 경우) 특히, 개정 15 @ 에릭 Muyser 무효의 부족에 의해 혼동 된 하나 I를 - Date # toString 사용법.
user66001

답변:


1063

내가 좋아하는 자바 스크립트를 사용하여 형식의 시간과 날짜에 대한 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);


27
이 두 사이트는 모두 라이센스가 제한적입니다. 따라서 권한없이 코드를 사용하면 위반 될 수 있습니다. Momentjs ( stackoverflow.com/a/10119138/278976 )는 더 나은 옵션처럼 보이며 MIT 라이센스입니다.
Homer6

4
@peller이 답변은 "자바 스크립트에서 날짜의 형식을 어떻게 지정합니까?"라는 질문에 답변합니다. 효과적으로 질문의 제목입니다. 질문의 본문에서 그는 상당히 오도됩니다. 그리고 요컨대,이 대답은 임의의 비표준 또는 언급되지 않은 라이브러리를 사용하는 문자열 형식에 대해서는 이야기하지 않습니다. 그러나 질문에 대한 # 1 의견이 지적했듯이 질문의 해당 부분이 잘못 요청되었습니다. 따라서 이것은 실제 질문에 대답하지만 실제로 존재하지 않는 형식 문자열은 아닙니다.
McKay

3
@ 맥케이; 그것은 질문이 아니 었습니다. 나는 당신이 peller가 무엇을 요구하는지 오해하거나 당신의 추론에 둔감을 느끼고 있다고 생각합니다.
codeinthehole

10
@codeinthehole "자바 스크립트에서 날짜 형식화"가 문제입니다. "지금까지는 JavaScript에 날짜 객체를 문자열로 포맷하기위한 API가 내장되어 있지 않다는 인상을 받았습니다." 그러나 행동에 대해 이야기합니다. 그가 자바 스크립트에서 네이티브라고 생각합니다. 그가 실수로 참조하는 라이브러리를 모르면 가장 좋은 추측은 "자바로 날짜를 어떻게 형식화합니까?"라는 질문을하는 것입니다. 그리고 나는 내가 야생 도약을하고 있다고 생각하지 않습니다.
McKay

5
MM 평균 01-12하지 1-12 : 2013년 4월 17일 => OK 2013년 4월 17일 => BAD
아드리안 MAIRE

678

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


7
또한 원숭이가 핵심 객체를 펀칭하는 대신 Date 객체 주위에 데코레이터 패턴을 제공하므로 도로 충돌이 발생할 가능성이 줄어 듭니다.
Gabe Martin-Dempesy

120
"경량"이라는 단어를 남용하지 마십시오. 5kb조차도 그러한 기능을 위해 엄청나게 크며, 오늘날에는 그 크기가 19kb로 증가했습니다.
user123444555621

27
@ Pumbaa80 나는 "5kb조차도 그런 기능으로 엄청나게 크다"는 것에 동의하지 않습니다. 문서를 보셨습니까? JS의 날짜를 처리하는 데 매우 유용한 라이브러리입니다. "D / M / Y"와 같은 기본 형식의 단일 사용을 위해 몇 KB보다 큰 라이브러리를 갖는 것은 약간 과잉이 될 수 있지만 몇 KB의 차이점은 무시할 수 있습니다. . 유지 관리 가능한 코드는 몇 KB를 위해 좋은 것입니다. + 100KB가 축소되면 동의합니다.
Turnerj

15
@Tumerj는 그것이 경량이라는 우려를 해결하는 데 도움이되지 않는다고 주장합니다. 두 사람은 관련이 없습니다.
JoshJordan

9
제트 비행기가 아니라 글라이더가되기 때문에 엔진을 제거하여 제트 비행기를 더 가볍게 만들 수 없습니다. 경량은 특정 기능을 수행하는 데 필요한 기능 만있는 것을 의미합니다. Ergo, 이것은 가벼운 솔루션입니다.
Bon

425

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

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

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

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


현지 시간이나 줄 루어를 사용하도록하는 방법?
Ustaman Sangat

7
라이브러리없이 시간을 얻을 수있는이 솔루션을 선호합니다 : new Date (). toTimeString (). match (/ ^ ([0-9] {2} : [0-9] {2} : [0-9 ] {2}) /) [0] 참고
markcial

이것을 할 수있는 방법이 있습니까? $ .datepicker.formatDate ( 'yy-mm-dd', new Date ( "txtAdvDate".Val ()); 또는 이와 유사한 것
Pomster

@Pomster-문자열 "txtAdvDate"에 val 메소드가 있다고 생각하게 만드는 이유는 무엇입니까? $ ( '# txtAdvDate'). val ()입니까? 그것이 생성자 중 하나에 적합하다고 가정하면 (여기 w3schools.com/jsref/jsref_obj_date.asp 참조 ) 제대로 작동합니다.
vbullinger

@Pomster-이것을 사용해보십시오 : document.getElementById (id) .value = $ .datepicker.formatDate ( 'yy-mm-dd', new Date ());
mrrsb

219

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

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

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

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

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


26
MDN은 또한 훌륭한 참조 자료입니다 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Cypher

2
내 대답은이 질문도 해결하려고했습니다. Firefox 또는 Mozilla 브라우저는 한 번 이러한 형식 문자열을 취하는 Date.toString () 메소드를 제공했다고 생각합니다. 불행히도, 나는 오래된 문서의 흔적을 찾을 수 없습니다. 더 이상 표준의 일부가 아니며 Firefox에서도 더 이상 지원되지 않는 것 같습니다.
peller

214

맞춤 형식 지정 기능 :

고정 형식의 경우 간단한 기능으로 작업이 가능합니다. 다음 예는 국제 형식 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

10
필수 형식 (1-1-2000이 아닌 01-01-2000)을 제공하기 때문에 답을 받아 들여야합니다.
Danubian Sailor

6
new Date (). toISOString (). slice (0,10) // "2015-04-27"
image72

2
9 월 11 일의 예를 갖지 않는 것이 매우 도움이되므로 어느 위치가 일과 월을 나타내는 지 명확하게 알 수 있습니다.
Karl Adler

1
@abimelex가 완료되었습니다. 더 명확 해지기를 바랍니다.
Adrian Maire


125

짧은 대답

자바 스크립트가 제공하는 "범용"문서는 없습니다. 자바 스크립트가있는 모든 브라우저는 실제로 구현입니다. 그러나 대부분의 최신 브라우저가 따르는 경향이 있으며 이것이 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


92

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

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


2
날짜를 생성하기 위해 datejs에 밀리 초를 공급하는 방법을 찾을 수 없습니다. 이와 같이 : var dateTime = new Date (); dateTime.setTime (밀리 초);
Arne Evertsson

14
25k? 날짜 만? 아야.
Ben Lesh

13
Datejs는 ~ 5 년 동안 활발하게 개발되지 않은 오래된 라이브러리입니다. 그들의 출처는 Github와 Google Code에 있으며 둘 다 2008 년의 마지막 업데이트 날짜입니다 (2013 년). 건강을 위해 XDate 또는 Moment.js를 사용하십시오.
Tyler Forsythe

3
@TylerForsythe 나는 그것에 대해 힌트 / 경고를 추가했습니다.
Tim Büthe

2
lol 날짜 스크립트가 오래되었습니다 ...
rtpHarry

69

meizz 에서 언급 한대로Dateformat메소드를 사용 하여 Object를 확장 할 수 있습니다 . 아래는 작성자가 제공 한 코드입니다. 그리고 여기 jsfiddle이 있습니다.

Date.prototype.format = function(format) //author: meizz
{
  var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(),    //day
    "h+" : this.getHours(),   //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
    "S" : this.getMilliseconds() //millisecond
  }

  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length==1 ? o[k] :
        ("00"+ o[k]).substr((""+ o[k]).length));
  return format;
}

alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));

AM / PM을 지원하기 위해 내 목적을 위해 약간 개선했습니다. – 아래 참조
Michael Angstadt

@WHK 그러나 나는 여전히 momentjs를 더 좋아한다 : D
gongzhitaao

월 캡처시 문제가 발생했습니다. new Date ((new Date ()). format ( 'yyyy-MM-dd')) 5 월을 반환하지만 이제 구문 분석 문자열에서 표준 시간대를 사용하는 Jun :-/ who입니까?
e-info128 2016 년

1
@WHK 이것은 실제로 매우 원시적 인 날짜 파서입니다. 데이트를 너무 많이 망칠 필요가없는 경우를 대비하여. 다양한 형식의 날짜에 실제로 대처 해야하는 경우 momentjs와 같은 독립형 라이브러리를 권장합니다. : D
gongzhitaao 2016 년

1
@WHK console.log(new Date('2014-06-01')) -> May나는 그것이 시간대와 관련이 있다고 생각합니다 : D
gongzhitaao

37

인용 한 기능은 표준 자바 스크립트가 아니므로 브라우저간에 이식 할 수 없으므로 좋은 방법이 아닙니다. 인 ECMAScript 3 사양 잎은 구문 분석 및 출력 형식은 자바 스크립트 구현까지 작동합니다. ECMAScript 5 는 ISO8601 지원의 하위 세트를 추가합니다. 언급 한 toString () 함수는 하나의 브라우저에서 혁신적이라고 생각합니다 (Mozilla?)

몇몇 라이브러리는이를 매개 변수화하는 루틴을 제공하며 일부는 광범위한 현지화 지원을 제공합니다. dojo.date.locale 에서 메소드를 확인할 수도 있습니다 .


5
실제로 질문에 대답하려고 시도해도 많은 표를 얻지 못할 것입니다. 인기있는 도서관을 지정하고 점수가 올라가는 것을보십시오!
RobG

30

이 매우 간단한 포맷터를 만들었습니다. 잘라내거나 붙여 넣을 수 있습니다 (더 깔끔한 버전으로 업데이트).

function DateFmt(fstr) {
  this.formatString = fstr

  var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var zeroPad = function(number) {
     return ("0"+number).substr(-2,2);
  }

  var dateMarkers = {
    d:['getDate',function(v) { return zeroPad(v)}],
    m:['getMonth',function(v) { return zeroPad(v+1)}],
    n:['getMonth',function(v) { return mthNames[v]; }],
    w:['getDay',function(v) { return dayNames[v]; }],
    y:['getFullYear'],
    H:['getHours',function(v) { return zeroPad(v)}],
    M:['getMinutes',function(v) { return zeroPad(v)}],
    S:['getSeconds',function(v) { return zeroPad(v)}],
    i:['toISOString']
  };

  this.format = function(date) {
    var dateTxt = this.formatString.replace(/%(.)/g, function(m, p) {
      var rv = date[(dateMarkers[p])[0]]()

      if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)

      return rv

    });

    return dateTxt
  }

}

fmt = new DateFmt("%w %d:%n:%y - %H:%M:%S  %i")
v = fmt.format(new Date())

http://snipplr.com/view/66968.82825/


4
저는이 수업이 마음에 들지만 "정적"수업이어야한다고 생각합니다. 한 번 이상 인스턴스화 할 필요가 없습니다. (필요하지 않음 new DateFmt())
Cheeso

1
Cheeso : 각기 다른 3 가지 방식으로 페이지에서 10 가지 날짜 형식을 지정하려면 어떻게합니까? 이 경우이 포매터의 인스턴스가 3 개있는 것이 좋습니다. 이것이 불가능한 완벽하게 유효한 유스 케이스입니다. OP는 이것을 올바르게 설계했습니다. 또한 생성시 형식을 지정하면 특정 방식으로 형식이 필요할 때마다 형식을 지정하는 코드 복제가 줄어 듭니다.
hsanders 2014 년

29

프레임 워크가없고 제한적이지만 가벼움

var d = (new Date()+'').split(' ');
// ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]

[d[3], d[1], d[2], d[4]].join(' ');
// "2013 Sep 03 21:58:03"

이 크로스 브라우저입니까? 크로스 로케일?
Iftah

예. (브라우저 사용자) 현지 시간대로 시간을 표시합니다.
John Williams


18

다른 답변에서 제공되는 몇 가지 옵션을 살펴본 후 다른 사람들도 유용하게 사용할 수있는 제한적이지만 간단한 솔루션을 작성하기로 결정했습니다.

/**
* Format date as a string
* @param date - a date object (usually "new Date();")
* @param format - a string format, eg. "DD-MM-YYYY"
*/
function dateFormat(date, format) {
    // Calculate date parts and replace instances in format string accordingly
    format = format.replace("DD", (date.getDate() < 10 ? '0' : '') + date.getDate()); // Pad with '0' if needed
    format = format.replace("MM", (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1)); // Months are zero-based
    format = format.replace("YYYY", date.getFullYear());
    return format;
}

사용법 예 :

console.log("The date is: " + dateFormat(new Date(), "DD/MM/YYYY"));

2
바꾸기 작업은 실제로 효율적이지 않으므로이를 방지하는 것이 좋습니다.
mrzmyr

내가 쓰면 어떻게됩니까? console.log ( "날짜는"+ dateFormat (new Date (), "DD / MM / YY"));
hakan

1
위의 두 자리 날짜를 처리하지 않기 때문에 "날짜는 12 / 11 / YY"라는 텍스트가 인쇄됩니다. 필요한 경우 return 문 바로 앞에 다음을 추가 할 수 있습니다 format = format.replace("YY", (""+date.getFullYear()).substring(2));.. 이것은 추악 해지고 있습니다-아마도 RegEx 경로 또는 비슷한 것을 내려 가고 싶을 것입니다.
Ollie Bennett

1
@mrzmyr 형식 날짜가 성능 병목이 될 것이라고 생각하십니까? 어서
doug65536

11

여기 제가 많이 사용하는 기능이 있습니다. 결과는 yyyy-mm-dd hh : mm : ss.nnn입니다.

function date_and_time() {
    var date = new Date();
    //zero-pad a single zero if needed
    var zp = function (val){
        return (val <= 9 ? '0' + val : '' + val);
    }

    //zero-pad up to two zeroes if needed
    var zp2 = function(val){
        return val <= 99? (val <=9? '00' + val : '0' + val) : ('' + val ) ;
    }

    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    var h = date.getHours();
    var min = date.getMinutes();
    var s = date.getSeconds();
    var ms = date.getMilliseconds();
    return '' + y + '-' + zp(m) + '-' + zp(d) + ' ' + zp(h) + ':' + zp(min) + ':' + zp(s) + '.' + zp2(ms);
}

1
좋은 대답이지만 zp2 함수를 다음과 같이 변경해야한다고 생각합니다. var zp2 = function (val) {return val <= 9? '00'+ val : (val <= 99? '0'+ val : ''+ val); }
Eric Wang

1
ms 부분의 값이 0 일 때 예외가 있습니다. 함수에서 결과는 '00'이지만 '000'은 아닙니다.
Eric Wang

9

라이브러리보다 작고 다양한 형식을 지원하도록 쉽게 확장 할 수있는이 날짜 개체 수정이 유용 할 수 있습니다.

노트:

  • 이전 브라우저에서는 정의되지 않은 Object.keys () 를 사용 하므로 지정된 링크에서 polyfill을 구현해야 할 수도 있습니다.

암호

Date.prototype.format = function(format) {
    // set default format if function argument not provided
    format = format || 'YYYY-MM-DD hh:mm';

    var zeropad = function(number, length) {
            number = number.toString();
            length = length || 2;
            while(number.length < length)
                number = '0' + number;
            return number;
        },
        // here you can define your formats
        formats = {
            YYYY: this.getFullYear(),
            MM: zeropad(this.getMonth() + 1),
            DD: zeropad(this.getDate()),
            hh: zeropad(this.getHours()),
            mm: zeropad(this.getMinutes())
        },
        pattern = '(' + Object.keys(formats).join(')|(') + ')';

    return format.replace(new RegExp(pattern, 'g'), function(match) {
        return formats[match];
    });
};

사용하다

var now = new Date;
console.log(now.format());
// outputs: 2015-02-09 11:47
var yesterday = new Date('2015-02-08');
console.log(yesterday.format('hh:mm YYYY/MM/DD'));
// outputs: 00:00 2015/02/08

8

gongzhitaao의 확실한 대답을 계속하려면 AM / PM을 처리하십시오.

 Date.prototype.format = function (format) //author: meizz
{
    var hours = this.getHours();
    var ttime = "AM";
    if(format.indexOf("t") > -1 && hours > 12)
    {
        hours = hours - 12;
        ttime = "PM";
     }

var o = {
    "M+": this.getMonth() + 1, //month
    "d+": this.getDate(),    //day
    "h+": hours,   //hour
    "m+": this.getMinutes(), //minute
    "s+": this.getSeconds(), //second
    "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
    "S": this.getMilliseconds(), //millisecond,
    "t+": ttime
}

if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
  (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length == 1 ? o[k] :
        ("00" + o[k]).substr(("" + o[k]).length));
return format;
}

아주 좋은 해결책! var a = new Date (); a.format ( 'yyyy-MM-d'); // 2013-08-16을 반환합니다.
Adrian Maire

this.getMonth (); iOS에서 실패
N20084753 10

7

유효한 날짜 형식에 대한 명확한 문서를 찾을 수 없으므로 다양한 브라우저에서 지원되는 사항을 확인하기 위해 자체 테스트를 작성했습니다.

http://blarg.co.uk/blog/javascript-date-formats

내 결과는 테스트 한 모든 브라우저에서 다음 형식이 유효하다는 결론을 내 렸습니다 (예 : "2013 년 8 월 9 일"날짜 사용).

[Full Year] / [Month] / [Date number] -Month는 선행 0이 있거나없는 숫자 또는 짧은 또는 긴 형식의 월 이름이 될 수 있으며 날짜 숫자는 선행 0이 있거나없는 수 있습니다.

  • 2013/08/09
  • 2013/08/9
  • 2013/8/09
  • 2013/8/9
  • 2013 년 8 월 / 09 일
  • 2013 년 8 월 9 일
  • 2013/8/09
  • 2013 년 8 월 9 일

[월] / [연도] / [날짜] -Month는 선행 0이 있거나없는 숫자 또는 짧은 또는 긴 형식의 월 이름이 될 수 있으며 날짜 숫자는 선행 0이 있거나없는 수 있습니다.

  • 08/2013/09
  • 08/2013/9
  • 2013 년 8 월 8 일
  • 8/2013/9
  • 2013 년 8 월 / 09
  • 2013 년 8 월 / 9 일
  • 2013 년 8 월 / 09
  • 2013 년 8 월 / 9 일

공백으로 구분 된 [Full Year], [Month Name] 및 [Date Number]의 모든 조합 -Month name은 짧은 형식 또는 긴 형식 일 수 있으며 날짜 숫자는 선행 0이 있거나없는 형식 일 수 있습니다.

  • 2013 년 8 월 09 일
  • 2013 년 8 월 09
  • 2013 년 8 월 9 일
  • 2013 년 8 월 09 일
  • 2013 년 8 월 9 일
  • 2013 년 8 월 9 일
  • 기타...

"현대 브라우저"에서도 유효합니다 (즉, IE9 이하를 제외한 모든 브라우저).

[Full Year]-[Month Number]-[Date Number] -Month and Date Number는 선행 0을 포함해야합니다 ( MySQL Date 유형이 사용 하는 형식 임)

  • 2013-08-09

월 이름 사용 :
흥미롭게도 월 이름을 사용할 때 월 이름의 처음 3 자만 사용되므로 다음 모든 것이 완벽하게 유효하다는 것을 알았습니다.

new Date('9 August 2013');
new Date('9 Aug 2013');
new Date('9 Augu 2013');
new Date('9 Augustagfsdgsd 2013');

6

JavaScript에서 날짜를 형식화하고 특히 구문 분석하는 것은 약간의 골치 거리가 될 수 있습니다. 모든 브라우저가 같은 방식으로 날짜를 처리하는 것은 아닙니다. 따라서 기본 메소드를 아는 것이 유용하지만 헬퍼 라이브러리를 사용하는 것이 더 실용적입니다.

XDate의 자바 스크립트 라이브러리 에 의해 아담 쇼 2011 년 중반부터 주변에 활성 아직 개발했다. 그것은 훌륭한 문서, 훌륭한 API, 형식을 가지고 있으며 하위 호환성을 유지하려고 노력하며 심지어 현지화 된 문자열을 지원합니다.

로캘 문자열 변경 링크 : https://gist.github.com/1221376


6

예제 코드 :

var d = new Date();
var time = d.toISOString().replace(/.*?T(\d+:\d+:\d+).*/, "$1");

산출:

"13:45:20"


2
toISOString ()에 주목할 가치가 있습니다. UTC를 출력합니다. 그래서 만약 new Date();// = Fri Nov 22 2013 17:48:22 GMT+0100, 위의 코드로 출력됩니다"16:48:22"
Tewr

6

sugar.js 라이브러리 에는 JavaScript로 날짜를 처리하는 데 유용한 기능이 있습니다. 그리고 그것은 매우 잘 문서화되어 있습니다.

Sugar는 Date 클래스가 Date.create 메소드로 시작하는 것을 좋아합니다.이 메소드는 "1 시간 전"과 같은 상대 형식을 포함하여 15 개 주요 언어로 된 형식을 거의 모든 형식으로 이해할 수 있습니다. 날짜는 일반적으로 사용되는 날짜 형식에 대한 바로 가기와 함께 이해하기 쉬운 구문을 사용하여 모든 형식 또는 언어로 출력 할 수 있습니다. 형식을 이해하고 내장 된 정밀도를 적용하는 is와 같은 방법으로 복잡한 날짜 비교도 가능합니다.

몇 가지 예 :

Date.create('July 4, 1776')  -> July 4, 1776
Date.create(-446806800000)   -> November 5, 1955
Date.create(1776, 6, 4)      -> July 4, 1776
Date.create('1776年07月04日', 'ja') -> July 4, 1776
Date.utc.create('July 4, 1776', 'en')  -> July 4, 1776

Date.create().format('{Weekday} {d} {Month}, {yyyy}')    -> Monday July 4, 2003
Date.create().format('{hh}:{mm}')                        -> 15:57
Date.create().format('{12hr}:{mm}{tt}')                  -> 3:57pm
Date.create().format(Date.ISO8601_DATETIME)              -> 2011-07-05 12:24:55.528Z

Date.create().is('the 7th of June') -> false
Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"

4

모든 브라우저

사용중인 소스 형식으로 날짜를 형식화하는 가장 신뢰할 수있는 방법은 다음 단계를 적용하는 것입니다.

  1. 객체 new Date()를 만드는 데 사용Date
  2. 사용 .getDate(), .getMonth().getFullYear()일, 월 및 연도를 각각 얻을 수
  3. 대상 형식에 따라 조각을 붙여 넣습니다.

예 :

var date = '2015-11-09T10:46:15.097Z';

function format(input) {
    var date = new Date(input);
    return [
       ("0" + date.getDate()).slice(-2),
       ("0" + (date.getMonth()+1)).slice(-2),
       date.getFullYear()
    ].join('/');
}

document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

( 이 Fiddle 도 참조하십시오 ).


최신 브라우저 만

내장 .toLocaleDateString방법을 사용하여 서식을 지정할 수도 있습니다. 안타깝게도 최신 브라우저에서만 지원되는 올바른 형식에 맞는 적절한 로케일과 옵션을 전달하면됩니다 (*) :

var date = '2015-11-09T10:46:15.097Z';

function format(input) {
    return new Date(input).toLocaleDateString('en-GB', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit'
    });
}

document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

( 이 Fiddle 도 참조하십시오 ).


(*) MDN에 따르면 , "현대 브라우저"수단 크롬 24+, 파이어 폭스 29+, IE11, Edge12 +, 오페라 15+ & 사파리 야간 빌드


3

내가 쓴 또 다른 옵션 :

DP_DateExtensions 라이브러리

도움이되는지 확실하지 않지만 여러 프로젝트에서 유용하다는 것을 알았습니다. 필요한 작업을 수행하는 것처럼 보입니다.

날짜 / 시간 형식, 날짜 수학 (날짜 부분 추가 ​​/ 빼기), 날짜 비교, 날짜 구문 분석 등을 지원합니다. 공개적으로 공개됩니다.

이미 프레임 워크를 사용하고 있다면 모두 고려할 필요는 없지만 (모두 가능) 프로젝트에 날짜 조작을 신속하게 추가 해야하는 경우 기회를 제공하십시오.



2

자리 숫자로 시간 만 표시 하려면 다음을 수행하십시오.

var now = new Date();
var cHour = now.getHours();
var cMinuts = now.getMinutes();
var cSeconds = now.getSeconds();

var outStr = (cHour <= 0 ? ('0' + cHour) : cHour) + ':' + (cMinuts <= 9 ? ('0' + cMinuts) : cMinuts) + ':' + (cSeconds <= 9 ? '0' + cSeconds : cSeconds);


1

JsSimpleDateFormat 은 날짜 객체를 포맷하고 포맷 된 문자열을 다시 Date 객체로 구문 분석 할 수있는 라이브러리입니다. Java 형식 (SimpleDateFormat 클래스)을 사용합니다. 월과 일의 이름은 현지화 할 수 있습니다.

예:

var sdf = new JsSimpleDateFormat("EEEE, MMMM dd, yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("Monday, June 29, 2009");

1

날짜 형식은 독점적 기능이므로 답은 "아무것도 없습니다". toString 함수가 특정 형식을 준수한다고 생각하지 않습니다. 예를 들어 ECMAScript 5.1 사양 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 2013 년 2 월 8 일, 173 페이지)에서 toString 함수는 다음과 같이 문서화됩니다. :

"문자열의 내용은 구현에 따라 다릅니다"

아래 샘플과 같은 기능을 사용하여 포맷을 매우 쉽게 수행 할 수 있습니다.

function pad(toPad, padWith) {
    return (String(padWith) + String(toPad)).slice(-1 * padWith.length);
}

function dateAsInputValue(toFormat) {
    if(!(toFormat instanceof Date)) return null;
    return toFormat.getFullYear() + "-" + pad(toFormat.getMonth() + 1, "00") + "-" + pad(toFormat.getDate(), "00");
}

function timeAsInputValue(toFormat) {
    if(!(toFormat instanceof Date)) return null;        
    return pad(toFormat.getHours(), "00") + ":" + pad(toFormat.getMinutes(), "00") + ":" + pad(toFormat.getSeconds(), "00");
}

1

Moment.js 와 같은 라이브러리가 제공하는 모든 기능이 필요하지 않으면 strftime 포트를 사용할 수 있습니다 . 가벼우 며 (Moment.js 2.15.0에 비해 축소 된 1.35KB 대 57.9KB) 대부분의 기능을 제공합니다 strftime().

/* Port of strftime(). Compatibility notes:
 *
 * %c - formatted string is slightly different
 * %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
 * %e - space is not added
 * %E - not implemented
 * %h - not implemented (use "%b")
 * %k - space is not added
 * %n - not implemented (use "\n")
 * %O - not implemented
 * %r - not implemented (use "%I:%M:%S %p")
 * %R - not implemented (use "%H:%M")
 * %t - not implemented (use "\t")
 * %T - not implemented (use "%H:%M:%S")
 * %U - not implemented
 * %W - not implemented
 * %+ - not implemented
 * %% - not implemented (use "%")
 *
 * strftime() reference:
 * http://man7.org/linux/man-pages/man3/strftime.3.html
 *
 * Day of year (%j) code based on Joe Orost's answer:
 * http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
 *
 * Week number (%V) code based on Taco van den Broek's prototype:
 * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
 */
function strftime(sFormat, date) {
  if (!(date instanceof Date)) date = new Date();
  var nDay = date.getDay(),
    nDate = date.getDate(),
    nMonth = date.getMonth(),
    nYear = date.getFullYear(),
    nHour = date.getHours(),
    aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
    isLeapYear = function() {
      if (nYear&3!==0) return false;
      return nYear%100!==0 || year%400===0;
    },
    getThursday = function() {
      var target = new Date(date);
      target.setDate(nDate - ((nDay+6)%7) + 3);
      return target;
    },
    zeroPad = function(nNum, nPad) {
      return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
    };
  return sFormat.replace(/%[a-z]/gi, function(sMatch) {
    return {
      '%a': aDays[nDay].slice(0,3),
      '%A': aDays[nDay],
      '%b': aMonths[nMonth].slice(0,3),
      '%B': aMonths[nMonth],
      '%c': date.toUTCString(),
      '%C': Math.floor(nYear/100),
      '%d': zeroPad(nDate, 2),
      '%e': nDate,
      '%F': date.toISOString().slice(0,10),
      '%G': getThursday().getFullYear(),
      '%g': ('' + getThursday().getFullYear()).slice(2),
      '%H': zeroPad(nHour, 2),
      '%I': zeroPad((nHour+11)%12 + 1, 2),
      '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
      '%k': '' + nHour,
      '%l': (nHour+11)%12 + 1,
      '%m': zeroPad(nMonth + 1, 2),
      '%M': zeroPad(date.getMinutes(), 2),
      '%p': (nHour<12) ? 'AM' : 'PM',
      '%P': (nHour<12) ? 'am' : 'pm',
      '%s': Math.round(date.getTime()/1000),
      '%S': zeroPad(date.getSeconds(), 2),
      '%u': nDay || 7,
      '%V': (function() {
              var target = getThursday(),
                n1stThu = target.valueOf();
              target.setMonth(0, 1);
              var nJan1 = target.getDay();
              if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
              return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
            })(),
      '%w': '' + nDay,
      '%x': date.toLocaleDateString(),
      '%X': date.toLocaleTimeString(),
      '%y': ('' + nYear).slice(2),
      '%Y': nYear,
      '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
      '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
    }[sMatch] || sMatch;
  });
}

샘플 사용법 :

strftime('%F'); // Returns "2016-09-15"
strftime('%A, %B %e, %Y'); // Returns "Thursday, September 15, 2016"

// You can optionally pass it a Date object...

strftime('%x %X', new Date('1/1/2016')); // Returns "1/1/2016 12:00:00 AM"

최신 코드는 여기에서 확인할 수 있습니다 : https://github.com/thdoan/strftime


0

"2012-12-29"를 반환하도록 날짜를 형식화하는 올바른 방법은 JavaScript 날짜 형식 의 스크립트를 사용하는 것입니다 .

var d1 = new Date();
return d1.format("dd-m-yy");

이 코드는 작동하지 않습니다 :

var d1 = new Date();
d1.toString('yyyy-MM-dd');      

3
당신은 위의 링크 된 스크립트 링크 된 "자바 스크립트 날짜 형식"필요
세바스찬 Viereck

0

개인적으로 PHP와 jQuery / javascript를 모두 동등한 측정 값으로 사용하기 때문에 php.js http://phpjs.org/functions/date/ 의 날짜 함수를 사용합니다 .

내가 이미 알고있는 것과 동일한 형식 문자열을 사용하는 라이브러리를 사용하는 것이 더 쉬우 며 날짜 함수에 대한 모든 형식 문자열 가능성을 포함하는 매뉴얼은 php.net에서 온라인으로 제공됩니다.

선호하는 메소드를 사용하여 HTML에 date.js 파일을 포함시킨 후 다음과 같이 호출하면됩니다.

var d1=new Date();
var datestring = date('Y-m-d', d1.valueOf()/1000);

원하는 경우 valueOf () 대신 d1.getTime ()을 사용할 수 있습니다.

자바 스크립트 타임 스탬프를 1000으로 나누면 자바 스크립트 타임 스탬프는 밀리 초 단위이지만 PHP 타임 스탬프는 초 단위이기 때문입니다.


0

이미 사용중인 많은 프레임 워크에는 알지 못하는 날짜 형식이 있습니다. jQueryUI는 이미 언급되었지만 Kendo UI (Globalization) , Yahoo UI (Util)AngularJS 와 같은 다른 프레임 워크 에도 있습니다.

// 11/6/2000
kendo.toString(new Date(value), "d")

// Monday, November 06, 2000
kendo.toString(new Date(2000, 10, 6), "D")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.