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
コメント