502

date objectJS を使用して a を文字列YYYYMMDD形式に変換しようとしています。Date.getYear()Date.getMonth()、および を連結するよりも簡単な方法はありDate.getDay()ますか?

4

50 に答える 50

690

私がよく使用する変更されたコード:

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();

  return [this.getFullYear(),
          (mm>9 ? '' : '0') + mm,
          (dd>9 ? '' : '0') + dd
         ].join('');
};

var date = new Date();
date.yyyymmdd();
于 2010-06-18T07:37:09.957 に答える
371

プロトタイプに追加するのは好きではありませんでした。別の方法は次のとおりです。

var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");

<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;

于 2013-05-23T13:14:14.527 に答える
222

関数を使用できますtoISOString

var today = new Date();
today.toISOString().substring(0, 10);

「yyyy-mm-dd」形式になります。

于 2015-02-10T12:37:05.710 に答える
45
new Date('Jun 5 2016').
  toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).
  replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');

// => '2016-06-05'
于 2016-06-06T03:11:06.890 に答える
40

純粋な JS ソリューションが必要ない場合は、jQuery UI を使用して次のように作業できます。

$.datepicker.formatDate('yymmdd', new Date());

通常、あまり多くのライブラリをインポートするのは好きではありません。しかし、jQuery UI は非常に便利なので、プロジェクトの別の場所で使用することになるでしょう。

その他の例については、http://api.jqueryui.com/datepicker/にアクセスしてください。

于 2013-12-18T21:46:05.730 に答える
27

ooの答えに加えて、論理演算を戻り値から分離し、代わりに変数に三項として入れることをお勧めします。

また、concat()変数の安全な連結を確保するために使用します

Date.prototype.yyyymmdd = function() {
  var yyyy = this.getFullYear();
  var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
  var dd = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
  return "".concat(yyyy).concat(mm).concat(dd);
};

Date.prototype.yyyymmddhhmm = function() {
  var yyyymmdd = this.yyyymmdd();
  var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
  var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
  return "".concat(yyyymmdd).concat(hh).concat(min);
};

Date.prototype.yyyymmddhhmmss = function() {
  var yyyymmddhhmm = this.yyyymmddhhmm();
  var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
  return "".concat(yyyymmddhhmm).concat(ss);
};

var d = new Date();
document.getElementById("a").innerHTML = d.yyyymmdd();
document.getElementById("b").innerHTML = d.yyyymmddhhmm();
document.getElementById("c").innerHTML = d.yyyymmddhhmmss();
<div>
  yyyymmdd: <span id="a"></span>
</div>
<div>
  yyyymmddhhmm: <span id="b"></span>
</div>
<div>
  yyyymmddhhmmss: <span id="c"></span>
</div>

于 2015-05-26T12:19:16.227 に答える
21

現地時間:

var date = new Date();
date = date.toJSON().slice(0, 10);

UTC 時間:

var date = new Date().toISOString();
date = date.substring(0, 10);

これを書いているので、日付は今日 2020-06-15 と表示されます。

toISOString() メソッドは、ISO 標準の日付を返します。YYYY-MM-DDTHH:mm:ss.sssZ

このコードは、YYYY-MM-DD 形式に必要な最初の 10 文字を取得します。

「-」を使用せずにフォーマットする場合は、次のようにします。

var date = new Date();
date = date.toJSON().slice(0, 10).split`-`.join``;

.join では、スペース、ドット、または好きなものを追加できます。

于 2020-06-15T18:35:03.347 に答える
20

UTC での Date.toISOString() 印刷によって発生する可能性のある日付ジャンプの問題のないプレーンな JS (ES5) ソリューション:

var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');

これは、@Pierre Guilbert の回答に対する @weberste のコメントへの回答です。

于 2014-11-20T11:15:00.213 に答える
11

// UTC/GMT 0
document.write('UTC/GMT 0: ' + (new Date()).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812013509

// Client local time
document.write('<br/>Local time: ' + (new Date(Date.now()-(new Date()).getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812113509

于 2015-08-12T01:38:22.280 に答える
10

もう 1 つの方法は、スウェーデン、リトアニア、ハンガリー、韓国など、ビッグエンディアンの日付形式 standardtoLocaleDateStringを持つロケールで使用することです。

date.toLocaleDateString('se')

区切り文字 ( -) を削除するには、数字以外を置き換えるだけです。

console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );

これには、UTC 日付形式で発生する可能性のある潜在的なエラーはありません。UTC 日付は、ローカル タイム ゾーンの日付と比較して 1 日ずれている可能性があります。

于 2016-10-29T11:49:14.110 に答える
9

var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);

console.log(dateFormated);

于 2015-04-23T13:06:45.793 に答える
7

dateformatはよく使われるパッケージです。

使い方:

dateformatNPM からダウンロードしてインストールします。モジュールでそれを必要とします:

const dateFormat = require('dateformat');

そして、あなたのものをフォーマットするだけです:

const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');

于 2016-04-25T09:48:41.070 に答える
5

ここにいるこの男=> http://blog.stevenlevithan.com/archives/date-time-formatformat()、JavascriptのDateオブジェクトの関数を作成したので、使い慣れたリテラル形式で使用できます。

アプリのJavascriptでフル機能の日付フォーマットが必要な場合は、それを使用してください。それ以外の場合、やりたいことが1回限りの場合は、getYear()、getMonth()、getDay()を連結するのがおそらく最も簡単です。

于 2010-06-18T01:05:42.757 に答える
4

@ooの回答から作業すると、フォーマット文字列に従って日付の文字列が返されます。必要に応じて、年とミリ秒などの 2 桁の年の正規表現を簡単に追加できます。

Date.prototype.getFromFormat = function(format) {
    var yyyy = this.getFullYear().toString();
    format = format.replace(/yyyy/g, yyyy)
    var mm = (this.getMonth()+1).toString(); 
    format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0]));
    var dd  = this.getDate().toString();
    format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0]));
    var hh = this.getHours().toString();
    format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0]));
    var ii = this.getMinutes().toString();
    format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0]));
    var ss  = this.getSeconds().toString();
    format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0]));
    return format;
};

d = new Date();
var date = d.getFromFormat('yyyy-mm-dd hh:ii:ss');
alert(date);

ただし、それがどれほど効率的かはわかりません。特に、多くの正規表現を使用するため、パフォーマンスに関しては賢明です。おそらく、純粋なjsをマスターしていない作業を使用する可能性があります。

注意: 定義済みのクラス定義を保持していますが、ベスト プラクティスに従って、それを関数またはカスタム クラスに入れたいと思うかもしれません。

于 2015-06-25T20:53:12.927 に答える
4

このコードは、Pierre Guilbert の回答に対する修正です。

(10000年経っても動く)

YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")
于 2016-09-17T00:33:06.130 に答える
3

mootoolsが提供しているようですDate().format()https ://mootools.net/more/docs/1.6.0/Types/Date

ただし、この特定のタスクのためだけに含める価値があるかどうかはわかりません。

于 2010-06-18T01:08:11.057 に答える
3

これを行う必要がある場合は、通常、以下のコードを使用します。

var date = new Date($.now());
var dateString = (date.getFullYear() + '-'
    + ('0' + (date.getMonth() + 1)).slice(-2)
    + '-' + ('0' + (date.getDate())).slice(-2));
console.log(dateString); //Will print "2015-09-18" when this comment was written

説明すると、.slice(-2) は文字列の最後の 2 文字を示します。

したがって、何があっても、日または月に「0」を追加して、最後の 2 つを求めることができます。これらは常に必要な 2 つだからです。

したがって、MyDate.getMonth() が 9 を返す場合、次のようになります。

("0" + "9") // Giving us "09"

その上に .slice(-2) を追加すると、次の最後の 2 文字が得られます。

("0" + "9").slice(-2)

"09"

しかし、date.getMonth() が 10 を返す場合、次のようになります。

("0" + "10") // Giving us "010"

したがって、.slice(-2) を追加すると、最後の 2 文字が得られます。または:

("0" + "10").slice(-2)

"10"
于 2015-09-18T13:23:56.510 に答える
2

追加の (しかし小さい) ライブラリーを含めることを気にしない場合、Sugar.jsは、JavaScriptで日付を操作するための優れた機能を多数提供します。日付をフォーマットするには、format関数を使用します。

new Date().format("{yyyy}{MM}{dd}")
于 2014-04-15T12:29:59.533 に答える
1

これは、日付時刻の両方のコンポーネントを許可し、数値または文字列として同じようにソートできる、より一般的なアプローチです。

日付 ISO 形式の番号順に基づいて、ローカル タイムゾーンに変換し、数字以外を削除します。すなわち:

// monkey patch version
Date.prototype.IsoNum = function (n) {
    var tzoffset = this.getTimezoneOffset() * 60000; //offset in milliseconds
    var localISOTime = (new Date(this - tzoffset)).toISOString().slice(0,-1);
    return localISOTime.replace(/[-T:\.Z]/g, '').substring(0,n || 20); // YYYYMMDD
}

使用法

var d = new Date();
// Tue Jul 28 2015 15:02:53 GMT+0200 (W. Europe Daylight Time)
console.log(d.IsoNum(8));  // "20150728"
console.log(d.IsoNum(12)); // "201507281502"
console.log(d.IsoNum());   // "20150728150253272"
于 2015-06-29T15:23:10.740 に答える
0

Date.js には、便利な日付解析メソッドが多数あります。

require("datejs")

(new Date()).toString("yyyyMMdd")

于 2016-06-09T15:14:15.680 に答える
0

この投稿は、このヘルパーを作成するのに役立ちました。誰かがこのソリューションを探している場合に備えて共有します。yyyy、mm、dd のすべてのバリエーションをサポートします。

Date.prototype.formattedDate = function (pattern) {
    formattedDate = pattern.replace('yyyy', this.getFullYear().toString());
    var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
    mm = mm.length > 1 ? mm : '0' + mm;
    formattedDate = formattedDate.replace('mm', mm);
    var dd = this.getDate().toString();
    dd = dd.length > 1 ? dd : '0' + dd;
    formattedDate = formattedDate.replace('dd', dd);
    return formattedDate;
};

d = new Date();
pattern = 'yyyymmdd';  // 20150813
d.formattedDate(pattern);

pattern = 'yyyy-mm-dd';
d.formattedDate(pattern); // 2015-08-13
于 2015-08-13T07:24:55.500 に答える
0

私の場合、 @oo ソリューションは機能しません。私の解決策は次のとおりです。

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();
  var ret = [this.getFullYear(), (mm<10)?'0':'', mm, (dd<10)?'0':'', dd].join('');

  return ret; // padding
};
于 2016-10-26T08:03:34.807 に答える
0

ここでの多くの回答は toisostring 関数を使用しています。この関数は、出力前に時間をズールー時間に変換するため、問題が発生する可能性があります。

function datestring(time) {
    return new Date(time.getTime() - time.getTimezoneOffset()*60000).toISOString().slice(0,10).replace(/-/g,"")
}

mydate = new Date("2018-05-03")
console.log(datestring(mydate))

日付文字列関数はタイムゾーンの問題を修正します。または、ズールー時間で作業することで問題全体を回避できます。

mydate = new Date("2018-05-03Z")
// mydate = new Date(Date.UTC(2018,5,3))
console.log(mydate.toISOString().slice(0,10).replace(/-/g,""))
于 2021-05-18T11:23:36.237 に答える
-1

これは、読みやすく、JavaScript でタイム シンクになる可能性があるローカル変数を回避するコンパクトで小さな関数です。プロトタイプを使用して標準モジュールを変更することはありません。名前空間が汚染され、本来あるべきことを実行しないコードが作成される可能性があるためです。

メイン関数の名前はばかげていますが、アイデアは理解できます。

function dateToYYYYMMDDhhmmss(date) {
    function pad(num) {
        num = num + '';
        return num.length < 2 ? '0' + num : num;
    }
    return date.getFullYear() + '/' +
        pad(date.getMonth() + 1) + '/' +
        pad(date.getDate()) + ' ' +
        pad(date.getHours()) + ':' +
        pad(date.getMinutes()) + ':' +
        pad(date.getSeconds());
}
于 2014-05-19T23:40:44.133 に答える