質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

2回答

4032閲覧

getJSON 世界標準時間を日本時間に変換して取得したい

chibiyuko_0124

総合スコア18

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

1クリップ

投稿2018/08/21 02:15

編集2018/08/21 03:46

いつもお世話になっております。
Google Maps API にて外部のJSONファイルを読み込みピンを表示させています。
JSONの読み込み時にjQuery.grepを使用して表示させるピンに絞り込みをかけています。
その際、JSONファイルに記述されている日時を現在日時と比較し、過去のもののみ表示という風にしたいのですが、JSONの時間が世界標準時間となっております。
これを日本時間に変換し、かつ現在時間と比較したいのですが変換の記述をどのようにすれば良いかわかりません。
ご存知の方は教えていただきたいです。

ソースは下記になります。

var map; var markers = []; var infowindow = new google.maps.InfoWindow(); function initialize() { geocoder = new google.maps.Geocoder(); var center = new google.maps.LatLng(XXX,XXX); map = new google.maps.Map(document.getElementById('map'), { zoom: 12, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP }); markMultiple(); } function markMultiple(){ $.getJSON('JSONファイル', function(data) { data = $.grep(data, function(obj, i) { var now_time = new Date(); var now_y = now_time.getFullYear(); var now_m = ("0"+(now_time.getMonth() + 1)).slice(-2); var now_d = ("0"+now_time.getDate()).slice(-2); var now_h = ("0"+now_time.getHours()).slice(-2); var now_i = ("0"+now_time.getMinutes()).slice(-2); var now_s =("0"+now_time.getSeconds()).slice(-2); var now_l = ("0"+now_time.getMilliseconds()).slice(-3); var now = now_y + '/' + now_m + '/' + now_d + ' ' + now_h + ':' + now_i + ':' + now_s; return now > obj.date }); $.each(data, function(i,obj) { var latLng = new google.maps.LatLng( obj.map_latitude, obj.map_longitude ); var content = ピンをクリック後吹き出しの内容; markMap(latLng, content); }); var markerCluster = new MarkerClusterer(map, markers); }); } function markMap(position, content){ var marker = new google.maps.Marker({ position: position, icon: 'img/icon.png' }); google.maps.event.addListener(marker, 'click', function() { infowindow.setContent(content); infowindow.open(map, marker); }); markers.push(marker); } google.maps.event.addDomListener(window, 'load', initialize);

JSONは以下になります。

[ { "id": "0", "station": "渋谷駅", "timer": "", "date": "2004-12-22T15:00:00.000Z", "map_latitude": XXX, "map_longitude": XXX, }, { "id": "1", "station": "原宿駅", "timer": "on", "date": "2004-12-23T15:00:00.000Z", "map_latitude": XXX, "map_longitude": XXX, } ]

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

タイムゾーンの変更

日本なら、new Date("タイムスタンプ")とすることで、
勝手に日本のタイムゾーンに変わります。

javascript

1new Date("2004-12-22T15:00:00.000Z"); // => Thu Dec 23 2004 00:00:00 GMT+0900 (日本標準時)

日付の比較

javascript

1Date.now() - new Date("2004-12-22T15:00:00.000Z");

投稿2018/08/21 03:03

_lemon2003_

総合スコア274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chibiyuko_0124

2018/08/21 03:49

_lemon2003_様 ご回答いただきましてありがとうございます。 わたしのソースの書き方が悪く、申し訳ありません。 修正しました。 現在の日時取得の記述の下、 return now > obj.date を実現させたいのですが、 obj.dateを日本標準時に変換したいと思っております。 その際 new Date("タイムスタンプ")をどのように扱えば良いでしょうか。 理解が悪くすみませんがよろしくお願いいたします。
_lemon2003_

2018/08/21 03:51

わかりました! 修正いたします。
_lemon2003_

2018/08/21 04:14

私の理解する限りは`now`には`2018/08/21 12:34:56`のような文字が入ると考えております。 その文字列を比較するのではなく、18 ~ 19 行目あたりの`now_time`を使って比較するのではどうでしょうか。 また、nowに代入された文字列は、obj.dateとの比較にしか使いませんよね? 比較にしか使われないなら、now_ *の処理は不要かと思います。
chibiyuko_0124

2018/08/21 04:27

_lemon2003_様 ありがとうございます。おっしゃるとおり'2018/08/21 12:34:56'の文字が入ります。 obj.dateの比較のためだけに作成しております。 `now_time`だけでも比較できるのですね。試して見ます。 obj.dateの変換法ももしご存知でしたらもう少しヒントをいただけますと幸いです。 よろしくお願いいたします。
_lemon2003_

2018/08/21 04:35

obj.date を Date オブジェクトに変換してから、 .getTime() をして、ミリ秒で比較すればどうでしょうか。 ソースは回答に記載いたします。
guest

0

ベストアンサー

当該部分のソースのみ書きます。

javascript

1return now_time.getTime() > new Date(obj.date).getTime();

過去なら true を返します。

.getTime() は

1970 年 1 月 1 日 00:00:00 UTC から指定した日時までの経過時間をミリ秒で表した数値。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime#Return_value

を返すので、その秒数で比較することができます。


前の回答にも記載したように、new Date("タイムスタンプ")の返り値は、
そのコンピューターのタイムゾーンに合わせられます。

なので、タイムスタンプは気にしなくてよいです。

もし、気にされるのであれば、次のようにしてください。

javascript

1var offset = +9 2 3return now_time.getTime() > new Date(new Date(obj.date).getTime() + (new Date().getTimezoneOffset() + offset * 60)*60000);

投稿2018/08/21 05:02

_lemon2003_

総合スコア274

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chibiyuko_0124

2018/09/03 04:53

遅くなってしまい申し訳ありません! こちらで解決できました。ありがとうございました。
namda

2018/09/03 05:16

横からですけどこれは協定時にロケールを足して更に9時間(日本時間)をオフセットとして追加しています。つまり協定時でも日本時間でもありません。 もしシステムが協定時で保存している場合このロジックを流用した演算結果をシステムに保存すると記録されている時間がチグハグになるので注意してください。 (このロジックを流用してテキストエリアに表示しそれをサーバに送る場合など)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問