programing

JavaScript의 날짜 형식에 대한 문서는 어디서 찾을 수 있습니까?

sourcetip 2022. 9. 5. 23:26
반응형

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()method on date object method method method 。

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

모멘트.js

날짜를 해석, 조작 및 포맷하기 위한 (Lightweight)* 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의 예를 참조하십시오.

커스텀 포맷 기능:

고정 포맷의 경우 간단한 함수로 작업이 이루어집니다.다음 예제에서는 국제 형식 YYY-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의로는 ECMAscript는 '''를 .Date에는 다음과 같은 형식 기능이 .class 에 、 음 、 class 、 class 、 class 、 class 、 class class class:::::::::

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"

토ISOString: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:구현에 의존하며 local 형식의 날짜 및 시간.

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"

ToLocale TimeString:구현에 의존하며 시각은 로케일 형식입니다.

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 : 날짜의 범용 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

서 는 에서입니다.Date() 오브젝트?

저는 오늘 우연히 이것을 발견했는데, 아무도 이 간단한 질문에 대답할 시간을 내지 않았다는 것에 매우 놀랐습니다.사실, 세상에는 날짜 조작을 도와주는 많은 도서관이 있습니다.어떤 사람들은 다른 사람들보다 낫다.하지만 그건 질문이 아니었어요.

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

Date제가 가장 자주 사용하는 오브젝트 레퍼런스는 w3schools.com 웹사이트에 있습니다(단, 구글의 빠른 검색은 당신의 요구를 더 잘 충족시킬 수 있는 더 많은 정보를 제공합니다).

또한 [Date Object Properties]섹션에는 에 대한 링크가 있습니다.이 링크에서는 커스텀 메서드를 사용하여 Date 객체를 확장할 수 있는 몇 가지 방법을 보여 줍니다.수년간 자바스크립트 커뮤니티에서는 이것이 베스트 프랙티스인지 아닌지에 대한 논쟁이 있어 왔습니다.저는 단지 그 존재를 지적하는 것만으로 찬성도 반대도 아닙니다.

단답

javascript를 지원하는 "범용" 문서는 없습니다. javascript가 있는 모든 브라우저는 실제로 구현된 것입니다.그러나 대부분의 최신 브라우저가 따르는 경향이 있는 표준이 있습니다. 그것은 EMCAScript 표준입니다. ECMAScript 표준 문자열은 ISO 8601 정의의 수정 구현이 최소한 필요합니다.

또한 브라우저도 따르는 경향이 있는IETF에 의해 전송되는두 번째 표준이 있습니다.이것은 RFC 2822에 규정된 타임스탬프의 정의입니다.실제 매뉴얼은 하단의 참조 목록에서 찾을 수 있습니다.

이것으로부터 기본적인 기능을 기대할 수 있습니다만, 「구원」하는 것은 본질적으로 「있는」 것이 아닙니다.이 절차에 대해 좀 더 자세히 설명하겠습니다.이 질문에 실제로 답한 사람은 3명(Scott, goofball Logic, peller)뿐입니다.이것은 대부분의 사람들이 Date 객체를 만들 때 실제로 어떤 일이 일어나는지 모르는 것을 의미합니다.


장황한 답변

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


질문에 답하거나 이 질문에 대한 답을 찾으려면 javascript가 새로운 언어가 아님을 알아야 합니다.실제로 ECMAScript 표준을 따르고 있습니다(그러나 javascript는 실제로 이러한 표준을 미리 설정했습니다.EMCAScript 표준은 Li의 초기 구현에서 구축되었습니다).veScript/JavaScript).현재의 ECMAScript 표준은 5.1(2011년)이다.질문이 처음 제기되었을 때(2009년 6월)의 기준은 3(4개는 포기)이었지만 2009년 말 투고 직후 5개가 발표됐다.여기에는 하나의 문제가 개략적으로 설명되어야 한다. 자바스크립트 구현이 어떤 표준을 따르더라도 실제 구현이 반영되지 않을 수 있다.a) 주어진 표준의 구현이기 때문에, b) 표준의 모든 구현이 청교도적인 것은 아니며, c) 구현이 d) 항상 새로운 표준과 동기화되어 있는 것은 아니기 때문이다.개미 작업 진행 중

기본적으로 javascript를 취급할 때는 구현(javascript 자체)의 파생상품(브라우저 고유의 javascript)을 취급합니다.예를 들어 구글의 V8은 ECMAScript 5.0을 구현하지만 Internet Explorer의 JScript는 ECMAScript 표준을 준수하지 않지만 Internet Explorer 9는 ECMAScript 5.0을 준수합니다.

단일 인수가 새 날짜()로 전달되면 다음 함수 프로토타입을 캐스팅합니다.

new Date(value)

두 개 이상의 인수가 새로운 Date()로 전달되면 다음 함수 프로토타입을 캐스팅합니다.

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

Both of those functions should look familiar, but this does not immediately answer your question and what quantifies as an acceptable “date format” requires further explanation. When you pass a string to new Date(), it will call the prototype (note that I'm using the word 시제품 loosely; the versions may be individual functions, or it may be part of a conditional statement in a single function) for 새 날짜(값) with your string as the argument for the “value” parameter. This function will first check whether it is a number or a string. The documentation for this function can be found here:

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

이를 통해 새로운 Date(값)에 대해 문자열 포맷을 허용하려면 Date.parse(string) 메서드를 검토해야 한다는 것을 추론할 수 있습니다.이 방법의 메뉴얼은, 다음의 URL 에 있습니다.

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의 javascript 구현 V8에 대해 알아보겠습니다.저는 이것이 "최고의" javascript 엔진이라고 제안하는 것이 아닙니다(V8에서 허용되는 포맷이 현재 사용 가능한 모든 포맷을 나타낸다고 가정할 수는 없습니다만, 이것이 현대의 기대에 따른다고 가정하는 것이 타당하다고 생각합니다.

Google V8, date.js, DateConstructor

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

DateConstructor 함수를 보면 DateParse 함수를 찾을 필요가 있다고 추론할 수 있지만, "year"는 실제 연도가 아니며 "year" 파라미터에 대한 참조일 뿐입니다.

Google V8, date.js, DateParse

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

이것은 %DateParseString을 호출합니다.이것은 실제로 C++ 함수의 런타임 함수 참조입니다.다음 코드를 나타냅니다.

구글 V8, runtime.cc, %DateParseString

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

이 함수에 관련된 함수 호출은 DateParser에 대한 것입니다.:Parse(); 이러한 함수 호출을 둘러싼 논리는 무시합니다.이것은 부호화 타입(ASCII 및 UC16)에 준거하고 있는 체크일 뿐입니다.날짜 분석기:파스는 다음과 같이 정의됩니다.

Google V8, Dateparser-inl.h, DateParser:: 파르세

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 Developer Network(IETF RFC 2822 타임스탬프 준거)에서 Mozilla가 가리키는 다음 사양을 참조하면 이를 더욱 확장할 수 있습니다.

https://www.rfc-editor.org/rfc/rfc2822#page-14

Microsoft Developer Network에서는 Date 객체에 대한 추가 표준인 ECMA-402, ECMAcript Internationalization API Specification에 대해서도 언급하고 있습니다.ECMAcript 5.1 표준(및 장래의 표준)을 보완하는 것입니다.이는 다음 URL에서 확인할 수 있습니다.

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

어떤 경우든, 이는 javascript의 모든 구현을 나타내는 "문서"가 없다는 것을 강조하는데 도움이 될 것입니다.다만, Date 오브젝트에 어떤 문자열이 허용 가능한지를 합리적으로 이해할 수 있는 충분한 문서가 아직 있습니다.생각해보면 꽤 부담스러운 질문이죠, 그렇죠?p

레퍼런스

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

https://www.rfc-editor.org/rfc/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는 구식이라고 지적합니다.저는 현재 프로젝트에 사용하고 있기 때문에 문제 없습니다만, 이 점에 유의하여 대체안을 검토해 주십시오.

요.Date 「」를 .formatmeizz에 의해 기술된 방법, 아래는 저자가 부여한 코드입니다.그리고 여기 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"));

당신이 언급하는 기능은 표준 Javascript가 아니기 때문에 브라우저를 통해 휴대할 수 없기 때문에 좋은 방법은 아닙니다.ECMAScript 3 사양은 해석 및 출력 포맷 기능을 Javascript 구현에 맡깁니다.ECMAScript 5는 ISO8601 지원의 서브셋을 추가합니다.말씀하신 toString() 함수는 하나의 브라우저(Mozilla)의 혁신이라고 생각합니다.

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

매우 심플한 포메터를 만들었습니다.컷/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/

프레임워크는 자유롭고 제한적이지만 가볍다

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"

DateJS는 확실히 풀기능이지만, 120줄 정도의 간단한 MUCH simple lib(JavaScript Date Format)를 추천합니다.

다른 답변에서 제공되는 몇 가지 옵션을 검토한 후, 나는 다른 사람들도 유용하다고 생각할 수 있는 제한적이지만 간단한 나만의 해결책을 쓰기로 결정했다.

/**
* 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"));

제가 자주 사용하는 기능이 있습니다.결과는 yyy-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);
}

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

주의:

  • 오래된 브라우저에서는 정의되지 않은 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

모든 브라우저

사용하고 있는 소스 포맷으로 날짜를 포맷하는 가장 신뢰할 수 있는 방법은 다음 단계를 적용하는 것입니다.

  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

( 바이올린도 참조).


최신 브라우저만

, 빌트인 '빌트인'을 할 수도 ..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, Edge 12+, Opera 15+ 및 Safari 간 safari 빌드를 의미합니다.

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;
}

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

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

검사 결과, 테스트한 모든 브라우저에서 다음 형식이 유효합니다(예: "2013년 8월 9일" 날짜 사용).

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

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

[Month]/[Full Year]/[Date Number] - 월은 선행 0이 있거나 없는 숫자 또는 단축 또는 긴 형식의 월 이름일 수 있으며, 날짜 번호는 선행 0이 있거나 없는 숫자일 수 있습니다.

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

공백으로 구분된 [Full Year](전체 연도), [Month Name](월 이름) 및 [Date Number](날짜 번호)의 조합은 모두 짧은 형식 또는 긴 형식일 수 있으며, 날짜 번호는 선행 0을 포함하거나 포함하지 않을 수 있습니다.

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

최신 브라우저(또는 IE9 이하를 제외한 모든 브라우저)에서도 유효합니다.

[Full Year]-[Month Number]-[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');

JavaScript에서 포맷, 특히 날짜를 해석하는 것은 다소 골칫거리가 될 수 있습니다.모든 브라우저가 동일한 방식으로 날짜를 처리하는 것은 아닙니다.따라서 기본 방법을 아는 것은 유용하지만 도우미 라이브러리를 사용하는 것이 더 실용적입니다.

Adam ShawXDate javascript 라이브러리는 2011년 중반부터 존재해 왔으며 현재도 개발 중입니다.훌륭한 문서, 뛰어난 API, 포맷, 하위 호환성을 유지하려고 노력하며 현지화된 문자열까지 지원합니다.

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

코드 예:

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

출력:

"13:45:20"

라이브러리 sugar.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"

또 다른 선택사항이 있는데, 이렇게 썼어요.

DP_Date Extensions 라이브러리

도움이 될지는 모르겠지만, 몇 가지 프로젝트에서 유용하다는 것을 알게 되었습니다. 필요한 기능을 할 수 있을 것 같습니다.

날짜/시간 형식, 날짜 연산(날짜 부분 추가/감산), 날짜 비교, 날짜 구문 분석 등을 지원합니다.자유롭게 오픈 소스로 제공되고 있습니다.

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

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

이 기능을 사용하다

toTimeString() and toLocaleDateString()

상세한 것에 대하여는, 다음의 링크를 참조해 주세요.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

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

예제:

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

날짜 형식이 고유 기능이기 때문에 답은 "nowhere"입니다.예를 들어 ECMAScript 5.1 사양(http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf, 2/8/2013, 페이지 173)에서는 toString 함수는 다음과 같이 기술되어 있습니다.

"String의 내용은 구현에 따라 다릅니다."

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

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");
}

Moment.js와 같은 라이브러리가 제공하는 모든 기능이 필요하지 않은 경우 strftime 포트를 사용할 수 있습니다.가볍고(Moment.js 2.15.0에 비해 최소 57.9KB에서 1.35KB), 대부분의 기능을 제공합니다.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 에서 입수할 수 있습니다.

게으른 해결책은 사용하는 것이다.Date.toLocaleString 지역

실행할 수 있는 일치하는 영역 목록을 가져옵니다.

#!/bin/bash

[ -f bcp47.json ] || \
wget https://raw.githubusercontent.com/pculture/bcp47-json/master/bcp47.json

grep 'tag" : ' bcp47.json | cut -d'"' -f4 >codes.txt

js=$(cat <<'EOF'
const fs = require('fs');
const d = new Date(2020, 11, 12, 20, 00, 00);
fs.readFileSync('codes.txt', 'utf8')
.split('\n')
.forEach(code => {
  try {
    console.log(code+' '+d.toLocaleString(code))
  }
  catch (e) { console.log(code+' '+e.message) }
});
EOF
)

# print THE LIST of civilized countries
echo "$js" | node - | grep '2020-12-12 20:00:00'

그리고 여기...리스트

af ce eo gv ha ku kw ky lt mg rw se sn sv xh zu 
ksh mgo sah wae AF KW KY LT MG RW SE SN SV

사용 예:

(new Date()).toLocaleString('af')

// -> '2020-12-21 11:50:15'

: )

(참고. 이것은 휴대성이 없을 수 있습니다.)

date-fns는 (현시점에서는 momentjs보다) 최신의 가장 큰 후보입니다.장점 중 몇 가지는

  • 모듈러형
  • 불변의
  • 18n
  • 나무 흔들기
  • 타이프스크립트 지원

매뉴얼에 대해서는 여기를 참조해 주세요.

그리고 이렇게 할 거예요.

import { format, formatDistance, formatRelative, subDays } from 'date-fns'

format(new Date(), "'Today is a' eeee")
//=> "Today is a Tuesday"

formatDistance(subDays(new Date(), 3), new Date(), { addSuffix: true })
//=> "3 days ago"

formatRelative(subDays(new Date(), 3), new Date())
//=> "last Friday at 7:26 p.m."

"2012-12-29"를 반환하는 날짜를 포맷하는 올바른 방법은 JavaScript 날짜 포맷의 스크립트를 사용하는 방법은 다음과 같습니다.

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

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

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

언급URL : https://stackoverflow.com/questions/1056728/where-can-i-find-documentation-on-formatting-a-date-in-javascript

반응형