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.

テンパスは素晴らしい仕事をしました。広告の問題がすぐに発生します。
タンパ

1
DatejsもTempusもNodeライブラリではありません(それらはNodeで使用できますが、npmライブラリインストーラーは使用できません)。誰もこれらを実際の答えとして挙げていないので、私は自分でそれをしました。
ジュリアンナイト

回答:


531

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'

または、1行で: new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')

ISO8601は必然的にUTC(最初の結果の末尾のZでも示される)なので、デフォルトでUTCを取得します(常に良いことです)。


4
ライブラリの使用を回避する巧妙でシンプルなソリューション-いいね!
Wingman4l7 2013

11
エラーが発生した場合Object has no method 'toISOString'、失敗しましたnew
allenhwkim

29
注意すべき点の1つは、この方法で正規表現を使用すると処理が遅く、ここでそれらを必要としないことです。これは問題なくnew Date().toISOString().replace('T', ' ').substr(0, 19)動作します。
キラー

2
タイムゾーンを削除することで、タイムゾーンごとに異なるオフセットを持つ異なる瞬間を表すことに注意してください。
RobG 2016年

1
@RobG明示的なタイムゾーンを持たない任意の日時表現について言うことができます。
Phil

105

UPDATE 2017-03-29:date-fnsを追加、MomentとDatejsに関するいくつかのメモ
UPDATE 2016-09-14:いくつかの優れた日付/時刻関数を持っているように見えるSugarJSを追加しました。


OK、実際に誰も実際に答えを出していないので、これは私のものです。

ライブラリは、標準的な方法で日付と時刻を処理するのに最適です。日付/時刻の計算には多数のエッジケースがあるため、開発をライブラリに引き渡すことができると便利です。

以下は、メインのノード互換時間フォーマットライブラリのリストです。

  • Moment.js [ Mustafaのおかげで ]「日付を解析、操作、およびフォーマットするための軽量(4.3k)javascript日付ライブラリ」-国際化、計算、相対日付形式が含まれます- 更新2017-03-29:それほど軽量ではありませんタイムゾーンのサポートが必要な場合は特に、これ以上の最も包括的なソリューションです。
  • date-fns [ Fractalfのおかげで2017-03-29に追加 ]小さく、高速で、標準のJS日付オブジェクトで動作します。タイムゾーンのサポートが必要ない場合は、モーメントの優れた代替手段です。
  • SugarJS -JavaScript組み込みオブジェクトタイプに必要な機能を追加する一般的なヘルパーライブラリ。いくつかの優れた日付/時刻機能が含まれています。
  • strftime-それが言うとおり、素晴らしくてシンプル
  • dateutil-これは、私がMomentJSの前に使用していたものです
  • ノードフォーマット日付
  • タイムトラベラー「Time Travelerは、日付を処理する一連のユーティリティメソッドを提供します。加算と減算からフォーマットまで。TimeTravelerは、グローバルネームスペースを汚染することなく、作成する日付オブジェクトのみを拡張します。」
  • Tempus [thanks to Dan D]-更新:これはNodeでも使用でき、npmでデプロイできます。ドキュメントを参照してください

非ノードライブラリもあります。

  • Datejs [Peter Olsonに感謝] -npmまたはGitHubにパッケージ化されていないため、Nodeでの使用はそれほど簡単ではありません。2007年以降更新されていないため、あまりお勧めしません。

2
これは関連性の高いdate-fns.orggithub.com/date-fns/date-fns
Fractalf

Momentの背後にいる人々は、2018年2月の時点でLuxonと呼ばれる実験を行っています。github.io
luxon /

@alxndrに感謝します。便利な再起動のように見えます。
ジュリアンナイト

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 2016

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
これは確かに学習に役立つかもしれませんが、これは小さくてよく構築されたライブラリを使用するよりも良い結果であることに同意する必要があります。ライブラリは維持され、一見しては明らかではないかもしれないが、ある時点で簡単に噛み付く可能性がある設計のエッジケースをカバーする可能性が高くなります-日付/時刻の計算は、固有の複雑さのためにこれらの問題が特に発生しやすくなります。
ジュリアンナイト

8
これは、String.replace()メソッドの非常に優れた使用法です。創造性のために+1
JamieJag

5
いいえ。この場合は絶対にライブラリを使用してください。フォーマットは変更される場合があります。変更されなくても、コードが複雑になります。コードを管理する他の人は、この関数を理解し、正しいことを確認するために時間を費やす必要があります。演習は学校用です。問題は、実際の使用方法に関するものでした。もちろん、これが最初または2番目の「実際の」プロジェクトでない限り、次に、そのようなことをするのが良いかもしれません。そうすれば、将来それをしてはいけない理由を知ることができます。
osa

3
実証済みの、または強化されたコードとしてライブラリを使用することの一般的な感情に感謝しますが、それらはデプロイメントの複雑さを追加する可能性もあります。このコードは、カレンダー関連のすべての微妙な要素を基になるDateオブジェクトに委譲し、適切な場所でgetUTCDate()メソッドなどを呼び出すだけです。さらに、このコードにバグを見つけた場合は、ここのstackoverflow.comで報告できます。基本的に、他のライブラリのmany-eyes / shallow-bugsの側面と一致しています。+1
汽船2014

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

JavaScriptライブラリsugar.js(http://sugarjs.com/)には日付をフォーマットする関数があります

例:

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

3
本当に素晴らしいライブラリのように見えます。それらのフォーマットはかなり洗練されており、それらのドキュメントは、JavaScriptで私が不満を感じたことのある他の100のことに対するエレガントなソリューションを示しています。これを試してみるつもりです。
eimajenthat 2014年

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 2015

5

Nodejsとangularjsでdateformat を使用しているので、とても良いです

インストール

$ 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 2017年

これは、3.2.2015, 15:30:00
デロケール

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のサブモジュールの1つであるモジュールを使用します。

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()で、これはフォーマットになります

replace(/ 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 2017年

StackOverflowへようこそ。回答を編集してください。そうしないと、反対票が投じられる可能性があります。現在のところ、これはコンテキストのない提案にすぎません。良い答えの書き方はこちらをご覧ください。
jacefarm 2017年

@ user7396942-回答にコンテキスト/説明を追加するため、投票されました。免責事項:それは今では見た目立つように私は、以前にダウン投票していたものではなかった多くの、より良いです。
T-Heron 2017年

3
なぜ.toString("yyyyMMddHHmmss")
Arjan 2017

1

日付をフォーマットするための最も簡単な方法は、モーメントlibを使用することです。https://momentjs.com/

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

おかげで、Jazeb_007 @それも、私は必要としない私のために働いているtoISOString()toUTCString()
Babluアーメド


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

-1

これは実際にあなたの質問に答えると思います。

JavaScriptで日付/時刻を操作するのはとても面倒です。いくつかの白髪の後、私はそれが実際には非常に単純であることがわかりました。

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

ここにフィドルがあります


ゼロベースの月に1を加える必要があります。
ミスティック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.