お世話になっております。
全体的な流れを説明致します。
あるエクセルシートをphpでjsonにエンコードして、そのjsonファイルをjavascriptで処理をしてグーグルマップに表示するという機能を実装しているのですが、jsonファイルの中に日付が入っており、その日付を利用して、何日~何日まで、グーグルマップ上に表示するという機能を実装したいのですが、jsonファイルの日付をdateクラスに変換ができなくて困っています。
ご教授いただければ幸いです。
----------------【追記】 9/11 19:02------------------------------
上の行は現在の日時を取って出力したものです(下記コード記載)
下の行はjsonファイルの中身をそのまま表示したものです
上の行のコード*****
var month = dt.getMonth()+1;
var day = dt.getDate();
var year = dt.getFullYear();
console.log(month + '-' + day + '-' + year);
コンソールログの表示********
9-11-2015
09-08-15
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
日付のフォーマットが解析できないか、JSONからの取得に失敗しているか、、、
ではないですか??
もしくは、その前にJSONファイルに変換している部分で失敗しているか。
どこまで確認がとれてて、どうなっているかを1つずつ確認したほうがよいかと思われます。
ちなみに、日付の扱い方はこちら↓
日付と時刻の計算 (JavaScript)
<追記>
やりたいことは、この「ページを表示した日が開始日から終了日の期間内だったらマップ上に表示したい」ということですよね?
であれば、
if( 開始日 && 終了日 )
ではなく、
今日の日付をとって、
if(開始日 <= 今日 && 今日 <= 終了日 )
というロジックになるかと思います。
jsonファイルの値(Excelを変換したもの)
"H":"09-08-15","I":"09-09-15",
という形式でしたら、それぞれをDate型にすると
var start = new Date(data[i]["H"]); // Tue Sep 08 2015 00:00:00 GMT+0900 (東京 (標準時)) var end = new Date(data[i]["I"]); // Wed Sep 09 2015 00:00:00 GMT+0900 (東京 (標準時)) var today = new Date(); // Mon Sep 14 2015 15:11:06 GMT+0900 (東京 (標準時))
となります。(出力結果はそれぞれを toString() したものです)
日付が特定範囲以内に含まれるかどうかを判定するには、getTime()を使用して比較します。
ここで注意したいのは、JSONから作成したDateオブジェクトは 時間が "00:00:00" になっているというところです。
開始日はこれで問題ないのですが、終了日がこのままだと9/9 00:00:00 以降は関係ないものとなってしまいます。
(9/9 12:34 とかは範囲内に入りません。)
なので、終了日に+1日して 9/10 00:00:00未満 にします。
end.setDate(end.getDate() + 1); // Thu Sep 10 2015 00:00:00 GMT+0900 (東京 (標準時))
あとは getTime() で比較してあげればよいです。
if( start.getTime() <= today.getTime() && today.getTime() < end.getTime() ){ // グーグルマップに表示 }
投稿2015/09/11 06:36
編集2015/09/14 07:00総合スコア1844
0
横から失礼
特に何かの縛りがないのであれば、JavaScriptでの日付・時刻の処理は素のDate()で行っていると何かと苦しいのでmoment.jsを使うのがおすすめです
その上で
- 入力される日付のフォーマットがYYYY-MM-DDで統一されている
- 表示されたときの秒単位ぐらいの精度で表示・非表示が切り替わればいい
という前提で以下のコードでどうでしょうか
JavaScript
1// 2// 時刻部分は00:00:00に補正されるので 3// fromにはイベント開始日の00:00:00のUNIXタイムスタンプが入る 4// 5var from = moment(data[i]["H"], "YYYY-MM-DD").startOf('day').unix(); 6// 7// 終了日は00:00:00だと困る(終了日いっぱいは表示したいので23:59:59まで)が好ましい 8// toにはこれでイベント終了日の23:59:59のUNIXタイムスタンプが入る 9// 10var to = moment(data[i]["I"], "YYYY-MM-DD").endOf('day').unix(); 11 12// 13// その上で比較はtimestamp値で行います 14// 15var current = moment().unix(); // 比較用の今現在の時刻のUNIXタイムスタンプ 16 17// 現在時刻が開始日~終了日に入っている? 18if((from <= current) && (current <= to)){ 19 // 表示 20}else{ 21 // 非表示 22}
投稿2015/09/14 06:40
総合スコア251
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/14 08:14
2015/09/14 08:41
2015/09/14 08:47
2015/09/14 09:30
2015/09/15 05:28
2015/09/17 12:09
0
どのようなフォーマットの日付か分からないですが、new Date("2015/9/11 15:30:00")
のような形でDateオブジェクトが作れないでしょうか?
各ブラウザでフォーマット出来る形式は下記が参考になるかと思います。(情報が古いかもですが)
http://so-zou.jp/web-app/tech/programming/javascript/grammar/object/date.htm
投稿2015/09/11 06:24
総合スコア1679
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/11 07:36
2015/09/11 10:01
2015/09/11 13:01
2015/09/14 05:34
2015/09/14 05:38
2015/09/14 05:45
2015/09/14 05:50
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/11 07:36
2015/09/14 06:42
2015/09/14 07:21
2015/09/14 07:45
2015/09/14 08:05
2015/09/14 08:30
2015/09/15 00:16 編集
2015/09/17 05:01
2015/09/17 05:31 編集
2015/09/17 10:58
2015/09/17 13:00
2015/09/18 01:35 編集
2015/09/18 02:16
2015/09/18 05:34
2015/09/18 08:29