web-dev-qa-db-ja.com

NodeJSを使ってUTCの日付を `YYYY-MM-DDのhh:mm:ss`文字列としてフォーマットするにはどうすればいいですか?

NodeJSを使用して、Dateを次の文字列フォーマットにフォーマットします。

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

それ、どうやったら出来るの?

186
Tampa

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(/\..+/, '')

ISO 8601は必ずUTC(最初の結果の末尾のZで示される)なので、デフォルトでUTCが得られます(常に良いことです)。

424
chbrown

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


はい、実際には誰も実際の答えを提供していないので、ここに私のものがあります。

図書館は標準的な方法で日付と時刻を処理するための確かに最善の策です。日付/時刻の計算には多くのEdgeのケースがあるので、開発をライブラリに引き渡すことができると便利です。

これは主なNode互換の時間フォーマットライブラリのリストです:

  • Moment.js [ Mustafaへの感謝 ] "日付の解析、操作、フォーマットのための軽量(4.3k)javascript日付ライブラリ" - 国際化、計算、相対的な日付フォーマットを含む - 更新2017-03-29 :それほど軽量ではなくなりましたが、それでも最も包括的なソリューションです。特にタイムゾーンのサポートが必要な場合は。
  • date-fns [ Fractalfのおかげで2017-03-29を追加 ]小さく、速く、標準のJS日付オブジェクトで動作します。タイムゾーンのサポートが必要ない場合は、Momentに代わる優れた方法です。
  • SugarJS - JavaScriptの組み込みオブジェクト型に多くの必要な機能を追加する一般的なヘルパーライブラリ。いくつかの優れた外観の日付/時刻機能が含まれています。
  • strftime - ちょうど言っているとおり、素敵でシンプル
  • dateutil - これはMomentJS以前に使用していたものです。
  • ノードフォーマット日付
  • " - TimeTraveller - " Time Travelerは、日付を処理するための一連のユーティリティメソッドを提供します。加算から減算から書式設定まで。TimeTravelerは、グローバル名前空間を汚染することなく、作成する日付オブジェクトのみを拡張します。」
  • Tempus [Dan Dに感謝] - UPDATE:これはNodeと一緒に使うこともnpmと一緒にデプロイすることもできます。ドキュメントを見てください。

Node以外のライブラリもあります。

  • Datejs [Peter Olsonに感謝] - npmやGitHubにはパッケージ化されていないのでNodeでの使用はそれほど簡単ではありません - 2007年以降更新されていないので実際には推奨されません!
97
Julian Knight

変換用のライブラリがあります。

npm install dateformat

それからあなたの要件を書いてください:

var dateFormat = require('dateformat');

次に値をバインドします。

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

dateformat を参照してください。

54
Onder OZCAN

私は図書館一般に対して何もしていません。この場合、アプリケーションプロセスの他の部分がかなり日付がない限り、汎用ライブラリはやり過ぎです。

このような小さなユーティリティ関数を書くことは、初心者にも熟練者にも同様に役に立つ練習であり、私達の間の初心者のための学習経験になることができます。

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"  */
37
HBP

ライブラリを使用せずに、希望の形式でタイムスタンプを取得するための読みやすくカスタマイズ可能な方法。

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"になります)

10
Mtl Dev

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

例:

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

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のコアメソッドでうまく動作するはずです。

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

//=> 2015-02-03 15:30:00
5
gest
new Date().toString("yyyyMMddHHmmss").
      replace(/T/, ' ').  
      replace(/\..+/, '') 

.toString()で、これはフォーマットになります

(/ T /、 '')を置き換えます。 // Tを '' 2017-01-15T ...に置き換えます...

(/..+/、 '')//を...に置き換えます。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
x-rw

x-class library ;のサブモジュールの1つである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
Abdennour TOUMI

私はロケールと言語サポートの鐘と笛のない簡単なフォーマットライブラリを必要としていました。だから私は修正しました

http://www.mattkruse.com/javascript/date/date.js

そしてそれを使った。 https://github.com/adgang/atom-time/blob/master/lib/dateformat.js を参照してください。

ドキュメントはかなり明確です。

0
adgang

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

ジャバスクリプトで日付/時刻を扱うのはとても面倒です。何本かの白髪の後、私はそれが実際にはかなり単純であると考えました。

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
J-Roel
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
Benjamin

代替案#6233 ....

UTCオフセットを現地時間に追加してから、それをDateオブジェクトのtoLocaleDateString()メソッドで目的の形式に変換します。

// 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の日時を希望の形式で表示しています。

enter image description here 

0
Adam

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
...
0
TinhNQ