Dateオブジェクト のメソッドの文字列化関数では使い勝手が悪いので、書式を使って文字列を返す関数を作成してみました。 この関数ですが VB.NET の Date型 の ToString("yyyy/MM/dd") の様な感じを再現しました。
また VB.NET と同様に日付の年数、月数、日数を加算する関数 addYears() , addMonths() , addDays() を作成しました。
- Dateオブジェクトから書式を使って文字列を返す関数
- Dateオブジェクトの年数を加算する関数 addYears()
- Dateオブジェクトの月数を加算する関数 addMonths()
- Dateオブジェクトの日数を加算する関数 addDays()
■Dateオブジェクトから書式を使って文字列を返す関数
/*
Dateオブジェクトの書式指定による文字列変換
関数名:cnvDateToString(dateObj, strFormat)
引き数:dateObj Dateオブジェクト
:strFormat 書式指定(年:YYYY,月:MM,日:DD,時:HH,分:MI,秒:SS)
ex:"YYYY/MM/DD HH:MI:SS"
戻り値:変換された文字列
*/
function cnvDateToString(objDate, strFormat) {
// 年月日時分秒を文字列化
var strYear = "" + objDate.getFullYear(); // 年
var strMonth = ('0' + (objDate.getMonth() + 1)).substr(-2); // 月
var strDate = ('0' + objDate.getDate()).substr(-2); // 日
var strHour = ('0' + objDate.getHours()).substr(-2); // 時
var strMinute = ('0' + objDate.getMinutes()).substr(-2); // 分
var strSecond = ('0' + objDate.getSeconds()).substr(-2); // 秒
var strRet = "" + strFormat;
// 各書式文字列の置換
strRet = strRet.replace("YYYY", strYear);
strRet = strRet.replace("MM", strMonth);
strRet = strRet.replace("DD", strDate);
strRet = strRet.replace("HH", strHour);
strRet = strRet.replace("MI", strMinute);
strRet = strRet.replace("SS", strSecond);
// 変換文字列
return strRet;
}
この関数の実行例を以下に示します。
var objDate = new Date("2020/05/08 13:59:58");
console.log("YYYY/MM/DD HH:MI:SS ==> " + cnvDateToString(objDate, "YYYY/MM/DD HH:MI:SS"));
console.log("YYYY/MM/DD ==> " + cnvDateToString(objDate, "YYYY/MM/DD"));
console.log("HH:MI:SS ==> " + cnvDateToString(objDate, "HH:MI:SS"));
console.log("MM/DD ==> " + cnvDateToString(objDate, "MM/DD"));
ブラウザの開発環境のコンソールを見ると以下の様になります。
この関数は各データの先頭「0」を強制的に付加していますので、 「0」無しの書式を追加するには別の書式文字列と、それに設定するデータ変数を作成する必要があります。
YYYY/MM/DD HH:MI:SS ==> 2020/05/08 13:59:58 YYYY/MM/DD ==> 2020/05/08 HH:MI:SS ==> 13:59:58 MM/DD ==> 05/08
■Dateオブジェクトの年数を加算する関数 addYears()
/*
Dateオブジェクトの年数加算
関数名:addYears(dateSrc, nYears)
引き数:dateSrc Dateオブジェクト
:nYears 年数加算値
戻り値:年数を加算されたDateオブジェクト
*/
function addYears(dateSrc, nYears) {
// 新規Dateオブジェクトの生成
var dateDes = new Date(dateSrc.getTime());
// 元の年に加算
var nYear = dateSrc.getFullYear() + nYears;
// 年再設定
dateDes.setFullYear(nYear);
// 新規Dateオブジェクトを戻す
return dateDes;
}
この関数の実行例を以下に示します。
var dateOrg;
var dateDes;
// 翌年
dateOrg = new Date("2020/05/01");
dateDes = addYears(dateOrg, 1);
console.log(cnvDateToString(dateOrg, "YYYY/MM/DD") + " ==> " + cnvDateToString(dateDes, "YYYY/MM/DD"));
// 前年(うるう年では無い)
dateOrg = new Date("2020/02/29");
dateDes = addYears(dateOrg, -1);
console.log(cnvDateToString(dateOrg, "YYYY/MM/DD") + " ==> " + cnvDateToString(dateDes, "YYYY/MM/DD"));
ブラウザの開発環境のコンソールを見ると以下の様になります。(この表示はFirefoxです)
2020/05/01 ==> 2021/05/01 2020/02/29 ==> 2019/03/01
■Dateオブジェクトの月数を加算する関数 addMonths()
/*
Dateオブジェクトの月数加算
関数名:addMonths(dateSrc, nMonths)
引き数:dateSrc Dateオブジェクト
:nMonths 月数加算値
戻り値:月数を加算されたDateオブジェクト
*/
function addMonths(dateSrc, nMonths) {
// 新規Dateオブジェクトの生成
var dateDes = new Date(dateSrc.getTime());
// 元の月に加算
var nMonth = dateSrc.getMonth() + nMonths;
// 月再設定
dateDes.setMonth(nMonth);
// 新規Dateオブジェクトを戻す
return dateDes;
}
この関数の実行例を以下に示します。
var dateOrg;
var dateDes;
// 翌月
dateOrg = new Date("2020/05/01");
dateDes = addMonths(dateOrg, 1);
console.log(cnvDateToString(dateOrg, "YYYY/MM/DD") + " ==> " + cnvDateToString(dateDes, "YYYY/MM/DD"));
// 前月(4/30)
dateOrg = new Date("2020/05/01");
dateDes = addMonths(dateOrg, -1);
console.log(cnvDateToString(dateOrg, "YYYY/MM/DD") + " ==> " + cnvDateToString(dateDes, "YYYY/MM/DD"));
// 前月(前年)
dateOrg = new Date("2020/01/01");
dateDes = addMonths(dateOrg, -1);
console.log(cnvDateToString(dateOrg, "YYYY/MM/DD") + " ==> " + cnvDateToString(dateDes, "YYYY/MM/DD"));
ブラウザの開発環境のコンソールを見ると以下の様になります。(この表示はFirefoxです)
2020/05/01 ==> 2020/06/01 2020/05/01 ==> 2020/04/01 2020/01/01 ==> 2019/12/01
■Dateオブジェクトの日数を加算する関数 addDays()
/*
Dateオブジェクトの日付加算
関数名:addDays(dateSrc, nDays)
引き数:dateSrc Dateオブジェクト
:nDays 日付加算値
戻り値:日付を加算されたDateオブジェクト
*/
function addDays(dateSrc, nDays) {
// 新規Dateオブジェクトの生成
var dateDes = new Date(dateSrc.getTime());
// 元の日付に加算
var nDate = dateSrc.getDate() + nDays;
// 日付再設定
dateDes.setDate(nDate);
// 新規Dateオブジェクトを戻す
return dateDes;
}
この関数の実行例を以下に示します。
var dateOrg;
var dateDes;
// 翌日
dateOrg = new Date("2020/05/01");
dateDes = addDays(dateOrg, 1);
console.log(cnvDateToString(dateOrg, "YYYY/MM/DD") + " ==> " + cnvDateToString(dateDes, "YYYY/MM/DD"));
// 前日(4/30)
dateOrg = new Date("2020/05/01");
dateDes = addDays(dateOrg, -1);
console.log(cnvDateToString(dateOrg, "YYYY/MM/DD") + " ==> " + cnvDateToString(dateDes, "YYYY/MM/DD"));
// 前日(前年12/31)
dateOrg = new Date("2020/01/01");
dateDes = addDays(dateOrg, -1);
console.log(cnvDateToString(dateOrg, "YYYY/MM/DD") + " ==> " + cnvDateToString(dateDes, "YYYY/MM/DD"));
ブラウザの開発環境のコンソールを見ると以下の様になります。(この表示はFirefoxです)
2020/05/01 ==> 2020/05/02 2020/05/01 ==> 2020/04/30 2020/01/01 ==> 2019/12/31
PR
コメント