忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

JavaScript Dateオブジェクト(Date)を操作する関数を作成

Dateオブジェクト のメソッドの文字列化関数では使い勝手が悪いので、書式を使って文字列を返す関数を作成してみました。 この関数ですが VB.NETDate型ToString("yyyy/MM/dd") の様な感じを再現しました。
また VB.NET と同様に日付の年数、月数、日数を加算する関数 addYears() , addMonths() , 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

コメント

コメントを書く