질문자 :Community Wiki
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()
함수를 호출하는 동안 모든 유효한 문자열 형식을 보여주는 문서를 찾을 수 없습니다.
이것은 문자열을 날짜로 변환하기 위한 것입니다. 반대로 날짜 객체를 문자열로 변환하는 측면을 보면 자바스크립트에는 날짜 객체를 문자열로 형식화하는 내장 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()
객체가 지원하는 형식 지정자를 나열하는 문서는 어디에 있습니까?
JavaScript와 날짜 작업을 사용하여 시간과 날짜 형식을 지정하는 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);
Haim Evgi순간.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 축소 + 가능한 가장 작은 설정에서 gzip으로 압축됨(2014년 2월)
chx007프로젝트에서 이미 jQuery UI 를 사용하고 있다면 내장된 datepicker 메서드를 사용하여 날짜 개체의 형식을 지정할 수 있습니다.
$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));
그러나 datepicker는 날짜 형식만 지정하고 시간 형식은 지정할 수 없습니다.
jQuery UI datepicker formatDate 예제를 살펴보십시오.
casid사용자 지정 서식 기능:
고정 형식의 경우 간단한 기능으로 작업을 수행합니다. 다음 예에서는 국제 형식 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(); // eg "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(); // eg "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(); // eg "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(); // eg "21/11/2016"
toLocaleString : 구현에 따라 다르며 로케일 형식의 날짜 및 시간입니다.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring
new Date().toLocaleString(); // eg "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(); // eg "08:00:00 AM"
toString : 날짜에 대한 일반 toString입니다.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring
new Date().toString(); // eg "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
Adrian MaireDate()
객체가 지원하는 형식 지정자를 나열하는 문서는 어디에 있습니까?
나는 오늘 이것을 우연히 발견했고 아무도 이 간단한 질문에 답하는데 시간을 들이지 않았다는 사실에 매우 놀랐습니다. 사실, 날짜 조작에 도움이 되는 많은 라이브러리가 있습니다. 일부는 다른 것보다 낫습니다. 그러나 그것은 질문이 아니었다.
AFAIK, 순수 JavaScript는 형식 지정자를 사용 하려는 방식으로 지원하지 않습니다. .toLocaleDateString()
, .toLocaleTimeString()
및 .toUTCString()
과 같은 날짜 및/또는 시간 형식 지정 방법을 지원합니다.
내가 가장 자주 사용하는 Date
개체 참조는 w3schools.com 웹사이트에 있습니다 (그러나 빠른 Google 검색 은 귀하의 요구를 더 잘 충족시킬 수 있는 더 많은 것을 보여줍니다).
또한 Date 개체 속성 섹션은 사용자 정의 메서드로 Date 개체를 확장할 수 있는 몇 가지 방법을 보여주는 prototype
대한 링크를 제공합니다. 이것이 베스트 프랙티스인지 아닌지에 대해 수년 동안 JavaScript 커뮤니티에서 약간의 논쟁 이 있었습니다. 저는 찬성하거나 반대하는 것이 아니라 존재를 지적했을 뿐입니다.
Scott Offen짧은 답변
자바스크립트가 충족하는 "보편적인" 문서는 없습니다. 자바스크립트가 있는 모든 브라우저는 실제로 구현된 것입니다. 그러나 대부분의 최신 브라우저가 따르는 경향이 있는 표준이 있으며 이것이 EMCAScript 표준입니다. ECMAScript 표준 문자열은 최소한 ISO 8601 정의의 수정된 구현을 취합니다.
이 외에도 IETF에서 제시한 두 번째 표준이 있어 브라우저도 따르는 경향이 있습니다. 이는 RFC 2822에서 만든 타임스탬프에 대한 정의입니다. 실제 문서는 하단의 참조 목록에서 찾을 수 있습니다.
이로부터 기본 기능을 기대할 수 있지만 "당연한" 것은 본질적으로 "있는 것"이 아닙니다. 하지만 이 질문에 대해 실제로 답변한 사람은 단 3명(Scott, goofballLogic 및 peller)인 것처럼 보이기 때문에 절차적으로 조금 더 자세히 설명하겠습니다. Date 객체를 생성합니다.
긴 답변
Date() 객체가 지원하는 형식 지정자를 나열하는 문서는 어디에 있습니까?
질문에 답하거나 일반적으로 이 질문에 대한 답을 찾으려면 자바스크립트가 새로운 언어가 아니라는 것을 알아야 합니다. 이것은 실제로 ECMAScript의 구현이며 ECMAScript 표준을 따릅니다. 현재 ECMAScript 표준은 5.1(2011)입니다. 질문이 처음 제기되었을 때('09년 6월), 표준은 3(4는 포기됨)이었지만 5는 2009년 말 게시물 직후에 릴리스되었습니다. 이것은 한 가지 문제를 요약해야 합니다. 자바 스크립트 구현이 따를 수 있는 표준은 실제로 존재하는 것을 반영하지 않을 수 있습니다. a) 주어진 표준의 구현이고, b) 표준의 모든 구현이 청교도가 아니며, c) 기능이 새로운 표준 d) 구현이 계속 진행 중인 작업입니다.
기본적으로 자바스크립트를 다룰 때는 구현(자바스크립트 자체)의 파생물(브라우저에 특정한 자바스크립트)을 다루고 있습니다. 예를 들어 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 ] ] ] ] ] )
이 두 기능은 모두 친숙해 보이지만 이것이 귀하의 질문에 즉시 대답하지 않으며 수용 가능한 "날짜 형식"으로 수량화되는 것은 추가 설명이 필요합니다. (; 버전이 각각의 기능이 될 수도 있고, 하나의 함수에서 조건문의 일부가 될 수 있습니다 내가 느슨하게 단어 프로토 타입을 사용하고 있습니다)에 대한 당신이) 새로운 날짜 (문자열을 전달할 때, 프로토 타입을 호출합니다 "value" 매개변수에 대한 인수로 문자열을 사용하여 new Date(value). 이 함수는 먼저 숫자인지 문자열인지 확인합니다. 이 기능에 대한 문서는 다음에서 찾을 수 있습니다.
http://www.ema-international.org/ema-262/5.1/#sec-15.9.3.2
이로부터 새로운 Date(value)에 허용되는 문자열 형식을 얻으려면 Date.parse(string) 메서드를 살펴봐야 한다고 추론할 수 있습니다. 이 방법에 대한 문서는 다음에서 찾을 수 있습니다.
http://www.ecma-international.org/ema-262/5.1/#sec-15.9.4.2
그리고 여기에 지정된 대로 날짜가 수정된 ISO 8601 확장 형식일 것으로 예상된다고 추가로 추론할 수 있습니다.
http://www.ema-international.org/ema-262/5.1/#sec-15.9.1.15
그러나 우리는 경험을 통해 자바스크립트의 Date 객체가 다른 형식을 허용한다는 것을 인식할 수 있으며(처음부터 이 질문의 존재로 인해 시행됨) ECMAScript가 구현 특정 형식을 허용하기 때문에 괜찮습니다. 그러나 여전히 사용 가능한 형식에 대해 어떤 문서를 사용할 수 있는지 또는 실제로 어떤 형식이 허용되는지에 대한 질문에 대답하지 않습니다. Google의 자바스크립트 구현인 V8을 살펴보겠습니다. 이것이 "최고" 자바스크립트 엔진("최고" 또는 "좋음"을 어떻게 정의할 수 있는지)을 제안하는 것이 아니며 V8에서 허용되는 형식이 현재 사용 가능한 모든 형식을 나타낸다고 가정할 수는 없지만 공정하다고 생각합니다. 그들이 현대의 기대치를 따른다고 가정하기 위해.
Google의 V8, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
DateConstructor 함수를 보면 DateParse 함수를 찾아야 한다고 추론할 수 있습니다. 그러나 "연도"는 실제 연도가 아니며 "연도" 매개변수에 대한 참조일 뿐입니다.
Google의 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 표준을 확인하고 표준과 호환되지 않는 경우 레거시 형식을 기반으로 날짜 작성을 시도합니다. 의견을 기반으로 한 몇 가지 핵심 사항:
- 파서에 알려지지 않은 첫 번째 숫자 앞의 단어는 무시됩니다.
- 괄호 안의 텍스트는 무시됩니다.
- ":" 뒤에 오는 부호 없는 숫자는 "시간 구성 요소"로 해석됩니다.
- 부호 없는 숫자 뒤에 "." "시간 구성 요소"로 해석되며 그 뒤에 밀리초가 와야 합니다.
- 부호 있는 숫자 뒤에 시 또는 분(예: +5:15 또는 +0515)이 오는 것은 시간대로 해석됩니다.
- 시와 분을 선언할 때 "hh:mm" 또는 "hhmm"을 사용할 수 있습니다.
- 시간대를 나타내는 단어는 시간대로 해석됩니다.
- 다른 모든 숫자는 "날짜 구성 요소"로 해석됩니다.
- 월의 처음 세 자리 숫자로 시작하는 모든 단어는 월로 해석됩니다.
- "hh:mm" 또는 "hhmm"의 두 가지 형식 중 하나로 분과 시간을 함께 정의할 수 있습니다.
- 숫자가 처리된 후에는 "+", "-" 및 일치하지 않는 ")" 기호가 허용되지 않습니다.
- 여러 형식(예: 1970-01-01)과 일치하는 항목은 표준 호환 EMCAScript 5.0 ISO 8601 문자열로 처리됩니다.
따라서 이것은 문자열을 Date 객체에 전달할 때 무엇을 기대해야 하는지에 대한 기본적인 아이디어를 제공하기에 충분해야 합니다. Mozilla가 Mozilla 개발자 네트워크(IETF RFC 2822 타임스탬프 준수)에서 가리키는 다음 사양을 살펴봄으로써 이를 더욱 확장할 수 있습니다.
http://tools.ietf.org/html/rfc2822#page-14
Microsoft 개발자 네트워크는 Date 개체에 대한 추가 표준인 ECMA-402, ECMAScript 5.1 표준(및 향후 표준)을 보완하는 ECMAScript 국제화 API 사양을 추가로 언급합니다. 여기에서 찾을 수 있습니다.
http://www.ema-international.org/ema-402/1.0/
어쨌든 이것은 자바스크립트의 모든 구현을 보편적으로 나타내는 "문서"가 없다는 것을 강조하는 데 도움이 됩니다. 그러나 여전히 Date 객체에 어떤 문자열이 허용되는지 합리적으로 이해할 수 있는 충분한 문서가 있습니다. 당신이 그것에 대해 생각할 때 꽤 로드된 질문, 예? :NS
참고문헌
http://www.ema-international.org/ema-262/5.1/#sec-15.9.3.2
http://www.ecma-international.org/ema-262/5.1/#sec-15.9.4.2
http://www.ema-international.org/ema-262/5.1/#sec-15.9.1.15
http://tools.ietf.org/html/rfc2822#page-14
http://www.ema-international.org/ema-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
Community WikiJavaScript에서 날짜를 다룰 때 Datejs 를 체크아웃하십시오. toString 함수의 경우에서 볼 수 있듯이 꽤 인상적이고 잘 문서화되어 있습니다.
편집 : Tyler Forsythe는 datejs가 구식이라고 지적합니다. 현재 프로젝트에서 사용하고 있으며 문제가 없었지만 이 점을 알고 대안을 고려해야 합니다.
Tim Büthemeizz가 언급한 대로 format
Date
객체를 확장할 수 있습니다. 아래는 작성자가 제공한 코드입니다. 그리고 여기에 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"));
gongzhitaao귀하가 인용한 기능은 표준 Javascript가 아니므로 여러 브라우저에서 이식할 수 없으므로 좋은 방법이 아닙니다. ECMAScript 3 사양 은 구문 분석 및 출력 형식 기능을 Javascript 구현에 맡깁니다. ECMAScript 5 는 ISO8601 지원의 하위 집합을 추가합니다. 나는 당신이 언급한 toString() 함수가 하나의 브라우저(Mozilla?)의 혁신이라고 믿습니다.
여러 라이브러리에서 이를 매개변수화하는 루틴을 제공하며 일부는 광범위한 지역화 지원을 제공합니다. dojo.date.locale 에서 메소드를 확인할 수도 있습니다.
peller이 매우 간단한 포맷터를 만들었습니다. 잘라내기/n/붙여넣기가 가능합니다(더 깔끔한 버전으로 업데이트됨).
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/
Lyndon S무료, 제한적이지만 가벼운 프레임워크
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"
Community WikiDateJS는 확실히 모든 기능을 갖추고 있지만 120줄 정도밖에 되지 않기 때문에 내가 선호하는 훨씬 더 간단한 lib(JavaScript Date Format)를 추천합니다.
Eric Wendelin다른 답변에 제공된 몇 가지 옵션을 살펴본 후 다른 사람들도 유용할 수 있는 제한적이지만 간단한 솔루션을 작성하기로 결정했습니다.
/** * 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"));
Ollie Bennett제가 많이 사용하는 기능입니다. 결과는 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); }
Community Wiki어떤 라이브러리보다 작고 다른 형식을 지원하도록 쉽게 확장할 수 있는 날짜 개체 수정이 유용할 수 있습니다.
노트:
암호
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
Community Wikigongzhitaao의 확고한 대답을 계속하려면 - 이것은 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; }
Community Wiki모든 브라우저
사용 중인 원본 형식으로 날짜 형식을 지정하는 가장 안정적인 방법은 다음 단계를 적용하는 것입니다.
-
new Date()
를 사용하여 Date
객체 생성 -
.getDate()
, .getMonth()
및 .getFullYear()
를 사용하여 각각 일, 월 및 연도를 가져옵니다. - 대상 형식에 따라 조각을 함께 붙여넣습니다.
예시 :
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
( 이 바이올린 참조).
최신 브라우저만
내장된 .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
( 이 바이올린 참조).
(*) MDN에 따르면 "최신 브라우저"는 Chrome 24+, Firefox 29+, IE11, Edge12+, Opera 15+ 및 Safari 야간 빌드를 의미합니다.
Community Wiki유효한 날짜 형식에 대한 확실한 문서를 찾을 수 없었으므로 다양한 브라우저에서 지원되는 내용을 확인하기 위해 자체 테스트를 작성했습니다.
http://blarg.co.uk/blog/javascript-date-formats
내 결과는 다음 형식이 내가 테스트한 모든 브라우저에서 유효하다는 결론을 내렸습니다(예에서는 "2013년 8월 9일" 날짜를 사용함).
[연도]/[월]/[날짜 번호] - 월은 앞에 0이 있거나 없는 숫자이거나 짧거나 긴 형식의 월 이름일 수 있으며 날짜 번호는 앞에 0이 있거나 없을 수 있습니다.
- 2013/08/09
- 2013/08/9
- 2013/8/09
- 2013/8/9
- 2013/08/09
- 2013년/8월/9일
- 2013/08/09
- 2013년/8월/9일
[월]/[연도]/[날짜 번호] - 월은 앞에 0이 있거나 없는 숫자이거나 짧거나 긴 형식의 월 이름일 수 있으며 날짜 번호는 앞에 0이 있거나 없을 수 있습니다.
- 2013/08/09
- 2013년 8월 9일
- 2013/08/09
- 2013년 8월 9일
- 2013/08/09
- 2013년 8월 9일
- 2013/08/09
- 2013년 8월 9일
공백으로 구분된 [전체 연도], [월 이름] 및 [날짜 번호] 조합 - 월 이름은 짧거나 긴 형식일 수 있으며 날짜 번호는 선행 0을 포함하거나 포함하지 않을 수 있습니다.
- 2013년 8월 9일
- 2013년 8월 09일
- 2013년 8월 9일
- 2013년 8월 9일
- 2013년 8월 9일
- 2013년 8월 9일
- 등...
"최신 브라우저"(또는 IE9 이하를 제외한 모든 브라우저)에서도 유효합니다.
[연도]-[월 숫자]-[날짜 숫자] - 월 및 날짜 숫자는 선행 0을 포함해야 합니다( MySQL 날짜 유형이 사용하는 형식).
월 이름 사용:
흥미롭게도 월 이름을 사용할 때 월 이름의 처음 3개 문자만 사용되므로 다음 모든 항목이 완벽하게 유효하다는 것을 발견했습니다.
new Date('9 August 2013'); new Date('9 Aug 2013'); new Date('9 Augu 2013'); new Date('9 Augustagfsdgsd 2013');
Community WikiJavaScript에서 날짜 형식을 지정하고 특히 구문 분석하는 것은 약간의 골칫거리가 될 수 있습니다. 모든 브라우저가 같은 방식으로 날짜를 처리하는 것은 아닙니다. 따라서 기본 메서드를 아는 것이 유용하지만 도우미 라이브러리를 사용하는 것이 더 실용적입니다.
Adam Shaw 의 XDate 자바스크립트 라이브러리 는 2011년 중반부터 사용되었으며 여전히 활발히 개발 중입니다. 환상적인 문서, 훌륭한 API, 형식화 기능이 있으며 역호환성을 유지하고 현지화된 문자열도 지원합니다.
로케일 문자열 변경 링크: https://gist.github.com/1221376
Sam Lown예제 코드:
var d = new Date(); var time = d.toISOString().replace(/.*?T(\d+:\d+:\d+).*/, "$1");
산출:
"13:45:20"
Community Wikisugar.js 라이브러리에는 JavaScript에서 날짜 작업을 위한 몇 가지 훌륭한 기능이 있습니다. 그리고 그것은 아주 잘 문서화되어 있습니다.
Sugar는 "1시간 전"과 같은 상대 형식을 포함하여 15개 주요 언어의 거의 모든 형식으로 날짜를 이해할 수 있는 Date.create 메서드로 시작하여 Date 클래스에 많은 사랑을 줍니다. 또한 날짜는 일반적으로 사용되는 날짜 형식에 대한 바로 가기와 함께 이해하기 쉬운 구문을 사용하여 모든 형식이나 언어로 출력할 수 있습니다. 모든 형식을 이해하고 기본 제공 정밀도를 적용하는 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"
Community Wiki내가 쓴 또 다른 옵션 :
DP_DateExtensions 라이브러리
도움이 될지 확실하지 않지만 여러 프로젝트에서 유용하다는 것을 알았습니다. 필요한 작업을 수행하는 것처럼 보입니다.
날짜/시간 형식, 날짜 수학(날짜 부분 추가/빼기), 날짜 비교, 날짜 구문 분석 등을 지원합니다. 자유롭게 오픈 소스입니다.
이미 프레임워크를 사용하고 있다면(모두 가능) 고려할 이유가 없지만, 프로젝트에 날짜 조작을 빠르게 추가해야 하는 경우에는 기회를 제공하십시오.
Jim Davis두 자리 숫자로만 시간을 표시하려는 경우 다음이 도움이 될 수 있습니다.
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);
Community WikiCommunity WikiJsSimpleDateFormat 은 날짜 객체를 포맷하고 포맷된 문자열을 다시 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");
Peter날짜 형식이 독점 기능이기 때문에 대답은 "아무데도"입니다. toString 함수가 특정 형식을 따르기 위한 것이라고 생각하지 않습니다. 예를 들어 ECMAScript 5.1 사양( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 2/8/2013, page 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"); }
Community WikiMoment.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(/%[az]/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에서 확인할 수 있습니다.
Community Wiki"2012-12-29"를 반환하도록 날짜 형식을 지정하는 올바른 방법은 JavaScript Date Format 의 스크립트를 사용하는 것입니다.
var d1 = new Date(); return d1.format("dd-m-yy");
이 코드는 작동하지 않습니다:
var d1 = new Date(); d1.toString('yyyy-MM-dd');
Sebastian Viereck개인적으로 PHP와 jQuery/javascript를 동등하게 사용하기 때문에 php.js http://phpjs.org/functions/date/의 날짜 함수를 사용합니다.
내가 이미 알고 있는 것과 동일한 형식 문자열을 사용하는 라이브러리를 사용하는 것이 더 쉽고 날짜 함수에 대한 모든 형식 문자열 가능성이 포함된 설명서는 물론 php.net에서 온라인으로 볼 수 있습니다.
선호하는 방법을 사용하여 HTML에 date.js 파일을 포함하고 다음과 같이 호출하기만 하면 됩니다.
var d1=new Date(); var datestring = date('Ym-d', d1.valueOf()/1000);
원하는 경우 valueOf() 대신 d1.getTime()을 사용할 수 있습니다. 동일한 작업을 수행합니다.
자바스크립트 타임스탬프를 1000으로 나누는 것은 자바스크립트 타임스탬프는 밀리초 단위이지만 PHP 타임스탬프는 초 단위이기 때문입니다.
Community Wiki많은 프레임워크(이미 사용 중일 수 있음)에는 사용자가 알지 못하는 날짜 형식이 있습니다. 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")
Community Wiki출처 : http:www.stackoverflow.com/questions/1056728/where-can-i-find-documentation-on-formatting-a-date-in-javascript