私はJSを使用してdate object
をYYYYMMDD
フォーマットの文字列に変換しようとしています。 Date.getYear()
、Date.getMonth()
、およびDate.getDay()
を連結するよりも簡単な方法はありますか?
私がよく使うコードを変更しました:
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"フォーマットを与えるでしょう。
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
純粋なJSソリューションが必要ない場合は、jQuery UIを使用して次のような作業を実行できます。
$.datepicker.formatDate('yymmdd', new Date());
私は通常あまりにも多くのライブラリをインポートしたくありません。しかしjQuery UIはとても便利です。おそらくあなたのプロジェクトのどこかでそれを使うでしょう。
その他の例については、 http://api.jqueryui.com/datepicker/ をご覧ください。
これは、今日の日付のYYYY-MM-DD
文字列を作成するために使用できる1行のコードです。
var d = new Date().toISOString().slice(0,10);
O-oの答えに加えて、戻り値から論理演算を分離し、代わりにそれらを変数に3値として入れることをお勧めします。
また、変数の安全な連結を確実にするために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 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();
var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min);
};
Date.prototype.yyyymmddhhmmss = 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();
var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min).concat(ss);
};
var d = new Date();
d.yyyymmdd();
d.yyyymmddhhmm();
d.yyyymmddhhmmss();
RiZKiTが示唆しているように、もう少しDRYをいじる
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'
私はネイティブオブジェクトを修正するのは好きではありません、そして私は乗算が受け入れられた解決策をパディングするストリングより明確であると思います。
function yyyymmdd(dateIn) {
var yyyy = dateIn.getFullYear();
var mm = dateIn.getMonth()+1; // getMonth() is zero-based
var dd = dateIn.getDate();
return String(10000*yyyy + 100*mm + dd); // Leading zeros for mm and dd
}
var today = new Date();
console.log(yyyymmdd(today));
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
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
もう一つの方法は toLocaleDateString
を ビッグエンディアンの日付フォーマット標準を持つロケールで使用することです 、例えばスウェーデン、リトアニア、ハンガリー、韓国、...:
date.toLocaleDateString('se')
区切り文字(-
)を削除するのは、数字以外の文字を置き換えるだけのことです。
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
これは、UTC日付形式で発生する可能性のあるエラーを持っていません。UTC日付は、ローカルタイムゾーンの日付に比べて1日ずれている可能性があります。
あなたは単に年の日付を取得するためにThis one line codeを使うことができます
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
このスレッドで最も人気のある答えのための少し簡略化されたバージョン https://stackoverflow.com/a/3067896/5437379 :
function toYYYYMMDD(d) {
var yyyy = d.getFullYear().toString();
var mm = (d.getMonth() + 101).toString().slice(-2);
var dd = (d.getDate() + 100).toString().slice(-2);
return yyyy + mm + dd;
}
このコードは、Pierre Guilbertの答えを修正したものです。
(それは1万年後でも機能します)
YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")
この人はここに=> http://blog.stevenlevithan.com/archives/date-time-format JavascriptのDate
オブジェクトのためのformat()
関数を書いたので、それはよく知られたリテラルフォーマットで使用することができます。
アプリのJavascriptでフル機能のDateフォーマットが必要な場合はそれを使用してください。そうでなければあなたがやりたいことが1つオフであるならば、getYear()、getMonth()、getDay()を連結することはおそらく最も簡単です。
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"
@ o-oの答えから作業すると、フォーマット文字列に従って日付の文字列が返されます。必要に応じて、年とミリ秒などに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を習得していないいくつかの仕事を使用することができます。
AngularJs(最大1.5)を使用している場合は、 日付フィルタ :を使用できます。
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
dateformat は非常によく使われているパッケージで、 moment.js よりもはるかに堅牢で使いやすいと思います。
使い方:
NPMからdateformat
をダウンロードしてインストールします。あなたのモジュールでそれを必要とします:
var dateFormat = require('dateformat');
それからあなたのものをフォーマットするだけです:
var myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
date-shortcode 救助へ!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
シンプルさと読みやすさのために別のものに答えます。
また、既存の定義済みクラスメンバーを新しいメソッドで編集することはお勧めできません。
function getDateInYYYYMMDD() {
let currentDate = new Date();
// year
let yyyy = '' + currentDate.getFullYear();
// month
let mm = ('0' + (currentDate.getMonth() + 1)); // prepend 0 // +1 is because Jan is 0
mm = mm.substr(mm.length - 2); // take last 2 chars
// day
let dd = ('0' + currentDate.getDate()); // prepend 0
dd = dd.substr(dd.length - 2); // take last 2 chars
return yyyy + "" + mm + "" + dd;
}
var currentDateYYYYMMDD = getDateInYYYYMMDD();
console.log('currentDateYYYYMMDD: ' + currentDateYYYYMMDD);
ネイティブJavascript:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');
これは、 date と time の両方のコンポーネントを許可する、より一般的なアプローチで、numberまたはstringのどちらかと同じようにソート可能です。
Date 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"
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
私の場合、@ o-o解決策は機能しません。私の解決策は次のとおりです。
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
};
これは https://stackoverflow.com/users/318563/o-o からの回答に対するちょっとした改善です。
Date.prototype.ddmmyyyy = function(delimiter) {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
var dd = this.getDate().toString();
return (dd[1]?dd:"0"+dd[0]) + delimiter + (mm[1]?mm:"0"+mm[0]) + delimiter +yyyy ; // padding
};
誰にでも役立つことを願っています!
:)
私はJavaScriptの日付オブジェクトを操作するための簡単なライブラリを書きます。これを試すことができます。
var dateString = timeSolver.getString(date, "YYYYMMDD")
いい、そして簡単:
var date = new Date();
var yyyy = date.getFullYear();
var mm = date.getMonth() + 1; // getMonth() is zero-based
if (mm < 10) mm='0'+mm;
var dd = date.getDate();
if (dd < 10) dd='0'+dd;
/*date.yyyymmdd();*/
console.log('test - '+yyyy+'-'+mm+'-'+dd);
現地日付をYYYYMMDD形式で取得するには、imを使用します。
var todayDate = (new Date()).toLocaleString('en-GB').slice(0,10).split("\/").reverse().join("");
Try this:
function showdate(){
var a = new Date();
var b = a.getFullYear();
var c = a.getMonth();
(++c < 10)? c = "0" + c : c;
var d = a.getDate();
(d < 10)? d = "0" + d : d;
var final = b + "-" + c + "-" + d;
return final;
}
document.getElementById("todays_date").innerHTML = showdate();
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
この機能が役に立つことを願っています
function formatDate(dDate,sMode){
var today = dDate;
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd = '0'+dd
}
if(mm<10) {
mm = '0'+mm
}
if (sMode+""==""){
sMode = "dd/mm/yyyy";
}
if (sMode == "yyyy-mm-dd"){
return yyyy + "-" + mm + "-" + dd + "";
}
if (sMode == "dd/mm/yyyy"){
return dd + "/" + mm + "/" + yyyy;
}
}
あなたは以下のようにあなた自身の機能を作成することができます
function toString(o, regex) {
try {
if (!o) return '';
if (typeof o.getMonth === 'function' && !!regex) {
let splitChar = regex.indexOf('/') > -1 ? '/' : regex.indexOf('-') > -1 ? '-' : regex.indexOf('.') > -1 ? '.' : '';
let dateSeparate = regex.split(splitChar);
let result = '';
for (let item of dateSeparate) {
let val = '';
switch (item) {
case 'd':
val = o.getDate();
break;
case 'dd':
val = this.date2Char(o.getDate());
break;
case 'M':
val = o.getMonth() + 1;
break;
case 'MM':
val = this.date2Char(o.getMonth() + 1);
break;
case 'yyyy':
val = o.getFullYear();
break;
case 'yy':
val = this.date2Char(o.getFullYear());
break;
default:
break;
}
result += val + splitChar;
}
return result.substring(0, result.length - 1);
} else {
return o.toString();
}
} catch(ex) { return ''; }
}
function concatDateToString(args) {
if (!args.length) return '';
let result = '';
for (let i = 1; i < args.length; i++) {
result += args[i] + args[0];
}
return result.substring(0, result.length - 1);
}
function date2Char(d){
return this.rightString('0' + d);
}
function rightString(o) {
return o.substr(o.length - 2);
}
中古:
var a = new Date();
console.log('dd/MM/yyyy: ' + toString(a, 'dd/MM/yyyy'));
console.log('MM/dd/yyyy: ' + toString(a, 'MM/dd/yyyy'));
console.log('dd/MM/yy: ' + toString(a, 'dd/MM/yy'));
console.log('MM/dd/yy: ' + toString(a, 'MM/dd/yy'));
確かに、日付文字列表現のバリエーションごとに特定の関数を構築できます。あなたが国際的な日付フォーマットを考えるならば、あなたは特別な名前で区別するのが難しい数十の特定の機能に巻きついています。
すべての形式に一致する妥当な機能はありませんが、以下のような妥当な機能構成があります。
const pipe2 = f => g => x =>
g(f(x));
const pipe3 = f => g => h => x =>
h(g(f(x)));
const invoke = (method, ...args) => o =>
o[method] (...args);
const padl = (c, n) => s =>
c.repeat(n)
.concat(s)
.slice(-n);
const inc = n => n + 1;
// generic format date function
const formatDate = stor => (...args) => date =>
args.map(f => f(date))
.join(stor);
// MAIN
const toYYYYMMDD = formatDate("") (
invoke("getFullYear"),
pipe3(invoke("getMonth")) (inc) (padl("0", 2)),
pipe2(invoke("getDate")) (padl("0", 2)));
console.log(toYYYYMMDD(new Date()));
はい、これはたくさんのコードです。しかし、高階関数formatDate
に渡される関数の引数を変更するだけで、文字列のすべての日付表現を文字通り表現することができます。すべてが明示的かつ宣言的です。つまり、何が起こっているのかをほとんど読むことができます。