JavaScriptとElectronで日付による有効期限判定


日付での有効期限管理が許されるのは1990年代までだよねー!

たしかに、今更感が半端ない。
でも、開発段階のテストツールをユーザーテストするとかで一時配布したいけど削除を徹底できない場合とか、限られた場面で使えそう。
Webアプリなのに会社の規約上レンタルサーバーを借りて公開とかができない場合は、Electronでスタンドアローン化して配布するけどその場合の処理も紹介する。

まずご用意いただくのは、一家に一台「Dateオブジェクト」

Dateオブジェクトを使えば現在時刻や指定時刻における、1970/01/01 00:00:00からのミリ秒が取得できる。
現在時刻と有効期限期日で比較して、現在時刻のほうが小さければ有効期間、大きければ有効期間が過ぎている、と判定する。

    var todayObj = new Date();  // new Date('yyyy-mm-ddThh:mm:ss');
    var today   = todayObj.getTime();  // 1970/1/1午前0時からの現在までのミリ秒

    // new Date('2019-09-05T15:57:00');のように0埋めが必要
    var endObj   = new Date('2019-09-30T23:59:59');  // 終了日の指定
    var end   = endObj.getTime();  // 1970/1/1午前0時からの終了日までのミリ秒

    if(today <= end){
        // 有効期限の範囲内
        alert("今日は有効期限より前です。");
    }
    else{
        // 有効期限切れ
        alert("今日は有効期限より後です。”);
        }

期限切れなら、バルスる。

ウィンドウよ、さらば。

Webサービスならブラウザを閉じさせてしまえば良い。
なので、アラートでメッセージを出してから閉じる。

timeLimit.js
 function isOverTimeLimit(){
    // アプリ起動時間と有効期限の判定をする
    var todayObj = new Date();  // new Date('yyyy-mm-ddThh:mm:ss');
    var today   = todayObj.getTime();  // 1970/1/1午前0時からの現在までのミリ秒

    // new Date('2019-09-05T15:57:00');のように0埋めが必要
    var endObj   = new Date('2019-09-30T23:59:59');  // 終了日の指定
    var end   = endObj.getTime();  // 1970/1/1午前0時からの終了日までのミリ秒

    if(today <= end){
        // 有効期限の範囲内
        alert("今日は有効期限より前です。");
    }
    else{
        // 有効期限切れ
        alert("今日は有効期限より後です。\n有効期限は "+endObj.getFullYear()+"/"+(endObj.getMonth()+1)+"/"+endObj.getDate()+" です。");
        // ウィンドウを閉じる
        window.open('','_self').close();
        window.open('about:blank','_self').close();
    }

}

この処理をページを読み出した時に行えばよい。

index.html
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Time limit script</title>
        <script type="text/javascript" src="js/timeLimit.js"></script>
    </head>

    <!-- HTML部分 -->
    <body onload="isOverTimeLimit();">
        sample
    </body>
</html>

Electronよ、さらば。

Electronの場合もMainWindowを閉じてやればよい。
レンダリングプロセスから閉じる方法もあるが、有効期間判定はツールが起動した直後に行うので、メインプロセスでやるのが楽。

main.js
function createWindow () {
    // Create the browser window.
    mainWindow = new BrowserWindow({width: 800, height: 600})

    // and load the index.html of the app.

    // アプリ起動時間と有効期限の判定をする
    var todayObj = new Date();  // new Date('yyyy-mm-ddThh:mm:ss');
    var today    = todayObj.getTime();  // 1970/1/1午前0時からの現在までのミリ秒

    // new Date('2019-09-05T15:57:00');のように0埋めが必要
    var endObj   = new Date('2019-09-30T23:59:59'); // 終了日の指定
    var end  = endObj.getTime();    // 1970/1/1午前0時からの終了日までのミリ秒

    if(today <= end){
        // 有効期限の範囲内
        console.log("今日は終了日より前です");
    mainWindow.loadURL(`file://${__dirname}/index.html`)
  }
    else{
        // 有効期限切れ
        console.log("今日は終了日より後です");
        dialog.showErrorBox("有効期限が切れています。", "有効期限は"+endObj.getFullYear()+"/"+(endObj.getMonth()+1)+"/"+endObj.getDate()+" です。");
        app.quit();     
    }