

日時の計算をしようとしています。  
codepenでは問題なくログに結果が表示されますが  
monacaで試すとnullになってしまいます  
変数ではなくnew Date()に日時を直接指定してもだめでした。  
原因がわかりませんのでよろしくお願い致します。

[code]

    var gg = '2015-12-31 23:59';　　　　
    var ff = '2015-12-31 23:56';
    
    　　　　　　
    var a = new Date(gg);　　　　　　　
    var b = new Date(ff);　　　　　　　　　　　
    var dd = a - b;　　　　
    console.log(dd);
    
[/code]


CC BY-SA 4.0
2015-05-27T09:31:54.773
10681
2019-12-13T19:46:23.653
2019-12-13T19:46:23.653
32986
question
javascript monaca jquery
monacaで変数が使えない場合


## console.logについて

実行環境の情報（IDEのプレビューか、iOS/Androidデバッガーか）が無いので確定的なことは言えないですが、iOS版のMonacaデバッガーではconsole.logは使えなかった記憶があります。

提示されているソースを実行してみたところ、私の手元の環境（Windows 8.1, Chrome 43, iOS 8.3,
ストア版Monacaデバッガー4.0.1）では、そもそもnullさえ出力されない状態でした。

公式のドキュメントによると、

> iOS アプリに関しては、Mac の Safari のリモートデバッグ機能と Monaca
> デバッガーを連携させて、デバッグを行えます。これにより、以下の機能が使用できます。  
>  Console を使用したデバッグ : Console 上で、メッセージの出力とデバッグセッションを行います。

<http://docs.monaca.mobi/3.5/ja/manual/debugger/debug/#by-debugger-usb>

と書いてあります。逆に言えば、Mac+Safariのリモートデバッグ機能を使わない場合には、consoleは使えないという風に読めます。私の手元では、iOSのMonacaデバッガーでは何も出力されませんでしたが、IDEのプレビューではconsole.logが出力されることを確認できました。

## 日付文字列について

提示されているJavaScriptコードにはバグを生みかねない問題があります。  
Dateオブジェクトに渡している日付形式の文字列が、標準で定められた形式に即していないため、ブラウザの実装次第では正しく解釈されません。  
（提示されたソースコードを実行したところ、Chrome 43では180000と出ましたが、Firefox 38ではNaNになりました）

iOS/AndroidのWebViewで、'2015-12-31
23:59'という形式がどう解釈されるかは把握していないですが、安全性を考えると、何かしらの標準に則った形式にすべきです（以下はISO8601の例です）。

[code]

    var gg = '2015-12-31T23:59:00+0900';
    var ff = '2015-12-31T23:56:00+0900';
    var a = new Date(gg);
    var b = new Date(ff);
    var dd = a - b;
    console.log(dd);
    
[/code]

日付文字列の形式については以下のページなどを参考にしてください。  
<http://so-zou.jp/web-app/tech/programming/javascript/grammar/object/date.htm>


CC BY-SA 3.0
2015-05-31T17:59:33.387
10827
2015-05-31T17:59:33.387
9871
10681
answer


iOSデバッガー(4.0.1)、iOS8.3上  
及び  
Androidデバッガー(4.0.2)、Android5.1.1上  
で検証しました。

デバイス上でもconsole.logの内容はきちんと出ますので、ご安心を。

本題ですが、なぜconsole.log(dd);がnullになるのかというと、ggとffがきちんと日付文字列として認識されず、aとbがdateオブジェクト生成に失敗するからです。

では、ggやffにどう書けばいいかですが、

[code]

    var gg = '2015/12/31 23:59';
    var ff = '2015-12-31T23:56:00.000+09:00';
    
[/code]

などとして下さい。  
つまり、年月日の区切りを「-」ではなく「/」にするか、  
書式に従うなら「yyyy-mm-ddTtt:mm:ss.sss+mm:ss」（+09:00の部分は日本標準時の場合）として下さい。

[code]

    var gg = '2015/12/31 23:59';
    var ff = '2015-12-31T23:56:00.000+09:00';
    var a = new Date(gg);
    var b = new Date(ff);
    console.debug("a-localestr"+a.toLocaleString());
    console.log("b-localestr"+b.toLocaleString());
    console.debug("a-gettime"+a.getTime());
    console.log("b-gettime"+b.getTime());
    var dd = a - b ; 
    var ee = a.getTime() - b.getTime();
    console.log("dd"+dd);
    console.log("ee"+ee);
    
[/code]


CC BY-SA 3.0
2015-06-02T04:06:42.807
10870
2015-06-02T04:06:42.807
9959
10681
answer