NodeJS를 사용하여 UTC 날짜를 YYYY-MM-DD hh : mm : ss 문자열로 포맷하는 방법은 무엇입니까?


242

NodeJS를 사용하여 a Date를 다음 문자열 형식으로 형식화하려고 합니다.

var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");

어떻게합니까?


4
라이브러리없이 수행하는 것이 귀찮습니다. datejs를
Peter Olson

8
또는 momentjs
Mustafa

또는 Tempus
Dan D.

Tempus는 훌륭하게 일했습니다. 광고 문제가 시작됩니다.
탬파

1
Datejs와 Tempus는 노드 라이브러리가 아닙니다 (노드와 함께 사용할 수는 있지만 npm 라이브러리 설치 프로그램을 사용할 수는 없습니다). 아무도 이것을 실제 답변으로 제시하지 않았으므로 직접 해냈습니다.
Julian Knight

답변:


532

Node.js를 사용하는 경우 EcmaScript 5가 있어야하므로 Date에는 toISOString방법이 있습니다. ISO8601의 약간의 수정을 요청합니다.

new Date().toISOString()
> '2012-11-04T14:51:06.157Z'

몇 가지만 잘라 내면 설정됩니다.

new Date().toISOString().
  replace(/T/, ' ').      // replace T with a space
  replace(/\..+/, '')     // delete the dot and everything after
> '2012-11-04 14:55:45'

또는 한 줄로 : new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')

ISO8601은 반드시 UTC (첫 번째 결과에서 후행 Z로 표시됨)이므로 기본적으로 UTC를 얻습니다 (항상 좋은 것임).


4
라이브러리 사용을 피하는 영리하고 간단한 솔루션-좋습니다!
Wingman4l7

11
오류가 발생 Object has no method 'toISOString'하면을 놓쳤습니다new
allenhwkim

29
한 가지 주목할 점은 이런 식으로 정규 표현식을 사용하는 것이 느리고 여기에서도 필요하지 않다는 것 new Date().toISOString().replace('T', ' ').substr(0, 19)입니다.
Killah

2
표준 시간대를 제거하면 모든 표준 시간대에서 다른 오프셋으로 다른 시간을 나타냅니다.
RobG

1
@RobG 명시적인 시간대가없는 모든 날짜 시간 표현에 대해 말할 수 있습니다.
Phil

105

업데이트 2017-03-29 : 날짜 -fns 추가, Moment 및 Datejs에 대한 참고 사항
업데이트 2016-09-14 : 일부 날짜 / 시간 기능이 우수한 것으로 보이는 SugarJS가 추가되었습니다.


아무도 실제로 실제 답변을 제공하지 않았으므로 여기에 내 것이 있습니다.

라이브러리는 날짜와 시간을 표준 방식으로 처리하기에 가장 좋은 방법입니다. 날짜 / 시간 계산에는 많은 경우가 있으므로 개발을 라이브러리로 전달하는 것이 유용합니다.

기본 노드 호환 시간 형식 라이브러리 목록은 다음과 같습니다.

  • Moment.js [ Mustafa 덕분에 ] "날짜 구문 분석, 조작 및 형식 지정을위한 경량 (4.3k) 자바 스크립트 날짜 라이브러리"-국제화, 계산 및 상대 날짜 형식 포함- 업데이트 2017-03-29 : 매우 가벼운 무게 특히 시간대 지원이 필요한 경우 더 포괄적이지만 여전히 가장 포괄적 인 솔루션입니다.
  • date-fns [ Fractalf 덕분에 2017-03-29 추가 ] 작고 빠르며 표준 JS 날짜 객체와 작동합니다. 시간대 지원이 필요하지 않은 경우 Moment의 훌륭한 대안입니다.
  • SugarJS -JavaScript 내장 객체 유형에 필요한 기능을 추가하는 일반적인 도우미 라이브러리입니다. 뛰어난 날짜 / 시간 기능이 포함되어 있습니다.
  • strftime- 멋지고 간단하게 말하는 것
  • dateutil- 이것은 MomentJS 이전에 사용했던 것입니다
  • 노드 형식
  • TimeTraveller- "Time Traveler는 날짜를 처리하기위한 유틸리티 메소드 세트를 제공합니다. 추가 및 빼기에서 형식화에 이르기까지 Time Traveler는 글로벌 네임 스페이스를 오염시키지 않고 작성된 날짜 오브젝트 만 확장합니다."
  • Tempus [Dan 덕분에 감사]-업데이트 : Node와 함께 사용하고 npm과 함께 배포 할 수도 있습니다 (문서 참조).

비 노드 라이브러리도 있습니다 :

  • Datejs [Peter Olson에게 감사] -npm 또는 GitHub에 패키지되어 있지 않으므로 Node에서 사용하기가 쉽지 않습니다. 2007 년 이후로 업데이트되지 않았으므로 권장되지 않습니다!

2
이것은 또한 관련성이 높은 date-fns.org ( github.com/date-fns/date-fns )
Fractalf

Moment 뒤에있는 사람들은 2018 년 2 월 현재 Luxon이라는 실험을합니다. moment.github.io/luxon/index.html
alxndr

감사합니다 @alxndr, 유용한 재부팅처럼 보입니다.
Julian Knight

RunKit의 순간 + toISOString () : runkit.com/shanekenyon87/5b845b0a64ab3f0012c9c607
Shane

70

변환을위한 라이브러리가 있습니다 :

npm install dateformat

그런 다음 요구 사항을 작성하십시오.

var dateFormat = require('dateformat');

그런 다음 값을 바인딩하십시오.

var day=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");

dateformat 참조


14
무엇입니까 result.request_date?
Dan Dascalescu

45

나는 도서관에 대해 일반적으로 아무것도 없다. 이 경우, 응용 프로그램 프로세스의 다른 부분이 크게 날짜를 나타내지 않는 한 범용 라이브러리는 과도하게 보입니다.

이와 같은 작은 유틸리티 기능을 작성하는 것은 초보자와 숙련 된 프로그래머 모두에게 유용한 연습이며 초보자들에게는 학습 경험이 될 수 있습니다.

function dateFormat (date, fstr, utc) {
  utc = utc ? 'getUTC' : 'get';
  return fstr.replace (/%[YmdHMS]/g, function (m) {
    switch (m) {
    case '%Y': return date[utc + 'FullYear'] (); // no leading zeros required
    case '%m': m = 1 + date[utc + 'Month'] (); break;
    case '%d': m = date[utc + 'Date'] (); break;
    case '%H': m = date[utc + 'Hours'] (); break;
    case '%M': m = date[utc + 'Minutes'] (); break;
    case '%S': m = date[utc + 'Seconds'] (); break;
    default: return m.slice (1); // unknown code, remove %
    }
    // add leading zero if required
    return ('0' + m).slice (-2);
  });
}

/* dateFormat (new Date (), "%Y-%m-%d %H:%M:%S", true) returns 
   "2012-05-18 05:37:21"  */

25
이것이 실제로 학습에 유용 할 수는 있지만, 작고 잘 구성된 라이브러리를 사용하는 것보다 이것이 더 나은 결과라는 데 동의하지 않아야합니다. 라이브러리는 유지 관리되고 설계 시점에서 눈에 잘 띄지 않지만 특정 시점에서 쉽게 물릴 수있는 가장자리 케이스를 다루는 경향이 있습니다. 날짜 / 시간 계산은 고유 한 복잡성으로 인해 이러한 문제가 발생하기 쉽습니다.
Julian Knight

8
이 창의성에 대한하려면 string.replace () 메소드의 아주 좋은 사용, +1
JamieJag

5
아닙니다.이 경우에는 절대로 라이브러리를 사용하십시오. 형식이 변경 될 수 있습니다. 변경되지 않더라도 코드가 복잡해집니다. 코드를 유지 관리하는 다른 사람들은 시간을 소비 하여이 기능을 이해하고 올바른지 확인해야합니다. 운동은 학교를위한 것입니다. 문제는 실제 사용에 관한 것이었다. 물론, 이것이 첫 번째 또는 두 번째 "실제"프로젝트 인 경우를 제외하고; 그런 식으로하는 것이 좋을 것이므로 앞으로는 안되는 이유를 배울 수 있습니다.
osa

3
라이브러리를 검증 / 배틀 강화 코드로 사용한다는 일반적인 감정에 감사하지만 배포 복잡성을 추가 할 수도 있습니다. 이 코드는 모든 달력 관련 미묘함을 기본 Date 객체에 위임하고 적절한 위치에서 예를 들어 getUTCDate () 메서드를 호출합니다. 또한 누구나이 코드에서 버그를 발견하면 stackoverflow.com에서 버그를보고 할 수 있으며 본질적으로 다른 라이브러리의 많은 눈 / 얕은 버그 측면과 일치합니다. 한
steamer25

11

라이브러리를 사용하지 않고도 원하는 형식으로 타임 스탬프를 쉽게 읽을 수 있고 사용자 정의 할 수있는 방법 :

function timestamp(){
  function pad(n) {return n<10 ? "0"+n : n}
  d=new Date()
  dash="-"
  colon=":"
  return d.getFullYear()+dash+
  pad(d.getMonth()+1)+dash+
  pad(d.getDate())+" "+
  pad(d.getHours())+colon+
  pad(d.getMinutes())+colon+
  pad(d.getSeconds())
}

(UTC 형식의 시간이 필요한 경우 함수 호출 만 변경하십시오. 예를 들어 "getMonth"는 "getUTCMonth"가됩니다)


9

자바 스크립트 라이브러리 sugar.js ( http://sugarjs.com/ )에는 날짜 형식을 지정하는 기능이 있습니다.

예:

Date.create().format('{dd}/{MM}/{yyyy} {hh}:{mm}:{ss}.{fff}')

3
정말 멋진 도서관처럼 보입니다. 그들의 서식은 매우 매끄럽고 문서는 내가 JavaScript에서 좌절 한 다른 백 가지에 대한 우아한 솔루션을 보여줍니다. 이것을 시도하려고합니다.
eimajenthat

6

Date 객체에 제공된 방법을 다음과 같이 사용하십시오.

var ts_hms = new Date();

console.log(
    ts_hms.getFullYear() + '-' + 
    ("0" + (ts_hms.getMonth() + 1)).slice(-2) + '-' + 
    ("0" + (ts_hms.getDate())).slice(-2) + ' ' +
    ("0" + ts_hms.getHours()).slice(-2) + ':' +
    ("0" + ts_hms.getMinutes()).slice(-2) + ':' +
    ("0" + ts_hms.getSeconds()).slice(-2));

정말 더러워 보이지만 JavaScript 핵심 메소드에서 잘 작동합니다.


2
1 월이 0으로 돌아 오므로 getMonth ()에 1을 추가해야한다는 데 동의하지만 getDate ()에 1을 추가하고 싶지는 않습니다.
Steve Onorato

5

dateformat을 사용하고 있습니다Nodejs와 angularjs에서 을 하고 있습니다.

설치

$ npm install dateformat
$ dateformat --help

데모

var dateFormat = require('dateformat');
var now = new Date();

// Basic usage
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");
// Saturday, June 9th, 2007, 5:46:21 PM

// You can use one of several named masks
dateFormat(now, "isoDateTime");
// 2007-06-09T17:46:21

// ...Or add your own
dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"';
dateFormat(now, "hammerTime");
// 17:46! Can't touch this!

// You can also provide the date as a string
dateFormat("Jun 9 2007", "fullDate");
// Saturday, June 9, 2007
...

3
new Date(2015,1,3,15,30).toLocaleString()

//=> 2015-02-03 15:30:00

StackOverflow에 오신 것을 환영합니다. 답을 수정하십시오. 그렇지 않으면 투표가 거부 될 수 있습니다. 지금처럼 상황이없는 제안 일뿐입니다. 좋은 답변을 작성하는 방법 은 여기를 참조하십시오 .
jacefarm

이것은 de-locale (따라서 toLocaleString)에서 발생합니다.3.2.2015, 15:30:00
alwe

2

대안 # 6233 ....

UTC 오프셋을 현지 시간에 추가 한 다음 객체 의 toLocaleDateString()메서드 를 사용하여 원하는 형식으로 변환 Date합니다.

// Using the current date/time
let now_local = new Date();
let now_utc = new Date();

// Adding the UTC offset to create the UTC date/time
now_utc.setMinutes(now_utc.getMinutes() + now_utc.getTimezoneOffset())

// Specify the format you want
let date_format = {};
date_format.year = 'numeric';
date_format.month = 'numeric';
date_format.day = '2-digit';
date_format.hour = 'numeric';
date_format.minute = 'numeric';
date_format.second = 'numeric';

// Printing the date/time in UTC then local format
console.log('Date in UTC: ', now_utc.toLocaleDateString('us-EN', date_format));
console.log('Date in LOC: ', now_local.toLocaleDateString('us-EN', date_format));

현지 시간을 기본으로하는 날짜 객체를 만들고 있습니다. UTC 오프셋을 추가하고 있습니다. 날짜 형식 개체를 만들고 있습니다. 원하는 날짜 형식으로 UTC 날짜 / 시간을 표시하고 있습니다.

여기에 이미지 설명을 입력하십시오


1

x 클래스 라이브러리x-date 의 하위 모듈 중 하나 인 모듈을 사용하십시오 .

require('x-date') ; 
  //---
 new Date().format('yyyy-mm-dd HH:MM:ss')
  //'2016-07-17 18:12:37'
 new Date().format('ddd , yyyy-mm-dd HH:MM:ss')
  // 'Sun , 2016-07-17 18:12:51'
 new Date().format('dddd , yyyy-mm-dd HH:MM:ss')
 //'Sunday , 2016-07-17 18:12:58'
 new Date().format('dddd ddSS of mmm , yy')
  // 'Sunday 17thth +0300f Jul , 16'
 new Date().format('dddd ddS  mmm , yy')
 //'Sunday 17th  Jul , 16'

1
new Date().toString("yyyyMMddHHmmss").
      replace(/T/, ' ').  
      replace(/\..+/, '') 

toString ()을 사용하면 형식이됩니다.

바꾸기 (/ T /, ''). // T를 ''2017-01-15T로 바꿉니다 ...

replace (/..+/, '') // for ... 13 : 50 : 16.1271

예를 들어 var datehour:

var date="2017-01-15T13:50:16.1271".toString("yyyyMMddHHmmss").
                    replace(/T/, ' ').      
                    replace(/\..+/, '');
    
                    var auxCopia=date.split(" ");
                    date=auxCopia[0];
                    var hour=auxCopia[1];

console.log(date);
console.log(hour);


1
답변 뒤에 문맥으로 설명을 제공 할 수 있습니까?
T-Heron

StackOverflow에 오신 것을 환영합니다. 답을 수정하십시오. 그렇지 않으면 투표가 거부 될 수 있습니다. 지금처럼 상황이없는 제안 일뿐입니다. 좋은 답변을 작성하는 방법 은 여기를 참조하십시오 .
jacefarm 2012 년

@ user7396942-답변에 컨텍스트 / 설명을 추가하기 위해 투표했습니다. 면책 조항 : 나는 이전에 투표를 한 사람이 아니 었습니다 . 지금은 훨씬 좋아 보입니다 .
T-Heron

3
.toString("yyyyMMddHHmmss")?
아르 잔

1

날짜 형식을 지정하는 가장 쉬운 방법은 moment lib를 사용하는 것입니다. https://momentjs.com/

const moment = require('moment')
const current = moment().utc().format('Y-M-D H:M:S')

고마워, @ Jazeb_007 그것은 내가 필요로하지 않고 나를 위해 일하고 toISOString()있으며toUTCString()
Bablu Ahmed


0
appHelper.validateDates = function (start, end) {
    var returnval = false;

    var fd = new Date(start);
    var fdms = fd.getTime();
    var ed = new Date(end);
    var edms = ed.getTime();
    var cd = new Date();
    var cdms = cd.getTime();

    if (fdms >= edms) {
        returnval = false;
        console.log("step 1");
    }
    else if (cdms >= edms) {
        returnval = false;
        console.log("step 2");
    }
    else {
        returnval = true;
        console.log("step 3");
    }
    console.log("vall", returnval)
    return returnval;
}

0

아래 코드와 MDN 링크를 확인하십시오

// var ts_hms = new Date(UTC);
// ts_hms.format("%Y-%m-%d %H:%M:%S")

// exact format
console.log(new Date().toISOString().replace('T', ' ').substring(0, 19))

// other formats
console.log(new Date().toUTCString())
console.log(new Date().toLocaleString('en-US'))
console.log(new Date().toString())


-1

나는 이것이 실제로 당신의 질문에 대답한다고 생각합니다.

자바 스크립트에서 날짜 / 시간으로 작업하는 것은 매우 성가신 일입니다. 약간의 회색 머리카락 이후 나는 그것이 실제로 매우 단순하다는 것을 알았습니다.

var date = new Date();
var year = date.getUTCFullYear();
var month = date.getUTCMonth();
var day = date.getUTCDate();
var hours = date.getUTCHours();
var min = date.getUTCMinutes();
var sec = date.getUTCSeconds();

var ampm = hours >= 12 ? 'pm' : 'am';
hours = ((hours + 11) % 12 + 1);//for 12 hour format

var str = month + "/" + day + "/" + year + " " + hours + ":" + min + ":" + sec + " " + ampm;
var now_utc =  Date.UTC(str);

여기는 바이올린입니다


0을 기준으로하는 달에 1을 추가해야합니다.
Mistic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.