date object
JS を使用して a を文字列YYYYMMDD
形式に変換しようとしています。Date.getYear()
、Date.getMonth()
、および を連結するよりも簡単な方法はありDate.getDay()
ますか?
50 に答える
私がよく使用する変更されたコード:
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();
プロトタイプに追加するのは好きではありませんでした。別の方法は次のとおりです。
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;
関数を使用できますtoISOString
:
var today = new Date();
today.toISOString().substring(0, 10);
「yyyy-mm-dd」形式になります。
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'
純粋な JS ソリューションが必要ない場合は、jQuery UI を使用して次のように作業できます。
$.datepicker.formatDate('yymmdd', new Date());
通常、あまり多くのライブラリをインポートするのは好きではありません。しかし、jQuery UI は非常に便利なので、プロジェクトの別の場所で使用することになるでしょう。
その他の例については、http://api.jqueryui.com/datepicker/にアクセスしてください。
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>
現地時間:
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 では、スペース、ドット、または好きなものを追加できます。
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 のコメントへの回答です。
// 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
もう 1 つの方法は、スウェーデン、リトアニア、ハンガリー、韓国など、ビッグエンディアンの日付形式 standardtoLocaleDateString
を持つロケールで使用することです。
date.toLocaleDateString('se')
区切り文字 ( -
) を削除するには、数字以外を置き換えるだけです。
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
これには、UTC 日付形式で発生する可能性のある潜在的なエラーはありません。UTC 日付は、ローカル タイム ゾーンの日付と比較して 1 日ずれている可能性があります。
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
dateformatはよく使われるパッケージです。
使い方:
dateformat
NPM からダウンロードしてインストールします。モジュールでそれを必要とします:
const dateFormat = require('dateformat');
そして、あなたのものをフォーマットするだけです:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
ここにいるこの男=> http://blog.stevenlevithan.com/archives/date-time-formatはformat()
、JavascriptのDate
オブジェクトの関数を作成したので、使い慣れたリテラル形式で使用できます。
アプリのJavascriptでフル機能の日付フォーマットが必要な場合は、それを使用してください。それ以外の場合、やりたいことが1回限りの場合は、getYear()、getMonth()、getDay()を連結するのがおそらく最も簡単です。
@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をマスターしていない作業を使用する可能性があります。
注意: 定義済みのクラス定義を保持していますが、ベスト プラクティスに従って、それを関数またはカスタム クラスに入れたいと思うかもしれません。
このコードは、Pierre Guilbert の回答に対する修正です。
(10000年経っても動く)
YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")
mootoolsが提供しているようですDate().format()
:https ://mootools.net/more/docs/1.6.0/Types/Date
ただし、この特定のタスクのためだけに含める価値があるかどうかはわかりません。
これを行う必要がある場合は、通常、以下のコードを使用します。
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"
これは、日付と時刻の両方のコンポーネントを許可し、数値または文字列として同じようにソートできる、より一般的なアプローチです。
日付 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"
Date.js には、便利な日付解析メソッドが多数あります。
require("datejs")
(new Date()).toString("yyyyMMdd")
この投稿は、このヘルパーを作成するのに役立ちました。誰かがこのソリューションを探している場合に備えて共有します。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
私の場合、 @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
};
ここでの多くの回答は 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,""))
これは、読みやすく、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());
}