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

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

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

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

Q&A

解決済

6回答

5220閲覧

JSTからUTCへの変換。

tkshp

総合スコア174

JavaScript

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

0グッド

0クリップ

投稿2018/11/07 05:20

編集2018/11/07 08:16

前提・実現したいこと

文字列の末尾がZになっていますが、「2018-11-07T15:00:00.000Z」という日本標準時間を世界標準時間に変換したいです。
ご教示お願い致します。

試したこと

JavaScript

1 startJSTday = '2018-11-07T15:00:00.000Z'; 2 console.log(startJSTday); //2018-11-07T15:00:00.000Z 3 4 var startUTCday = new Date(); 5 startUTCday.setTime(new Date(startJSTday).getTime() - 1000*60*60*9); 6 7 console.log(startUTCday); //Wed Nov 07 2018 15:00:00 GMT+0900 (東京 (標準時))

また、世界標準時間を取得したら、「2018-11-07T06:00:00.000Z」のような書式に変換するのに
簡単な方法等ありましたら、ご教示お願い致します。

参考にしたサイト

ご回答を受けてのメモ。

JavaScript

1var normalizedDateStr = startJSTday.replace(/Z$/, '+09:00'); 2 3return new Date(normalizedDateStr).toISOString();

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

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

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

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

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

m.ts10806

2018/11/07 06:55

提示コードだとstartJSTday未定義なのでそのあたりはエラーが出ないコードで提示いただきたく
tkshp

2018/11/07 06:57

修正しました。宜しくお願い致します。
guest

回答6

0

ベストアンサー

スマートなやり方という面から申しますと。

まず、与えられた文字列が「日本時間ベースのはずなのにZで終わるUTCベースのように書かれている」間違った書式のデータであるというのはご認識なさっているようです。
そこで何よりも優先して、正しい書式のデータを得るのが良いです。これは単なる文字列置換。

すると後はどのような形式にでもすんなり変換できるようになります。

javascript

1var normalizedDateStr = startJSTday.replace(/Z$/, '+09:00'); 2 3return new Date(normalizedDateStr).toISOString();

投稿2018/11/07 07:51

編集2018/11/07 07:59
yuba

総合スコア5568

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

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

tkshp

2018/11/07 08:06

ご回答ありがとうございます。 勉強になりました。
guest

0

  • 「2018-11-07T15:00:00.000Z」という日本標準時間

→ これはISOで決まっている書式ですので、Z記号で終わっているものは日本時間ではあり得ません

  • 世界標準時間を取得したら、「2018-11-07T06:00:00.000Z」のような書式に変換する

→ JSのDateはtoISOString()をもっています((new Date()).toISOString()と使えます)

  • スマート

→ スマートと思っていただけるかは存じませんが。jsで時間を妥当に扱いたいならmoment.jsを使うことを検討すべきです。moment.jsがロードされているとして

javascript

1//new Date()で取得できるたものをutcにするのは 2const utcnow = moment().utc().toISOString(); 3//文字記載されたものをパースして、ローカル時間にするには 4const moment.parseZone('2018-11-07T15:00:00.000Z').local().toISOString();

投稿2018/11/07 07:52

papinianus

総合スコア12705

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

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

tkshp

2018/11/07 08:07

ご回答ありがとうございます。 勉強になりました。 moment.jsを使ったやり方があるのですね。
guest

0

JavaScript

1var startJSTday = '2018-11-07T15:00:00.000Z'; 2var d = new Date(startJSTday); 3d.setMinutes(d.getMinutes() + d.getTimezoneOffset()); // timezoneOffset: -540 (only Japan) 4console.log(d.toISOString()); // 2018-11-07T06:00:00.000Z or +002018-11-07T06:00:00.000Z

投稿2018/11/07 07:55

x_x

総合スコア13749

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

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

tkshp

2018/11/07 08:07

ご回答ありがとうございます。 とても簡単なコードで書けました。 ありがとうございます。
x_x

2018/11/07 08:13

これ、マシンのロケールが日本である前提なので、そうでない可能性があるなら yuba さんの回答のほうがいいかと
tkshp

2018/11/07 08:15

ご回答ありがとうございます。 なるほど、では、すみません、ベストアンサーを移させていただきます。
guest

0

toUTCString()でUTC時刻が取得できるので、そこからフォーマットを加工してみては?


stringで取得できたならそこからその日付文字列をもってDate()にかけるだけでうまくいきそうです。

サンプルコード追記。

js

1var dt = new Date(); 2var g = dt.toUTCString(); 3var utcdate = new Date(g); 4console.log(utcdate);

投稿2018/11/07 07:03

編集2018/11/07 07:49
m.ts10806

総合スコア80850

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

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

tkshp

2018/11/07 08:06

ご回答ありがとうございます。 勉強になりました。 下記のように試してみました。 var dt = new Date('2018-11-07T15:00:00.000Z'); var g = dt.toUTCString(); var utcdate = new Date(g); console.log(utcdate); //Thu Nov 08 2018 00:00:00 GMT+0900 (日本標準時)
guest

0

「javascript JST」でぐぐってみては。

投稿2018/11/07 06:59

y_waiwai

総合スコア87774

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

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

0

下記で解決しました。
これよりスマートな方法がありましたら、ご教示お願い致します。

JavaScript

1 2startJSTday = '2018-11-07T15:00:00.000Z'; 3var startUTCday = new Date(new Date(startJSTday).getTime() - 1000*60*60*9); 4 5startUTCday = startUTCday.getUTCFullYear()+'-'+ ('0'+ (startUTCday.getUTCMonth()+1)).slice(-2)+'-'+('0'+startUTCday.getUTCDate()).slice(-2)+'T'+ ('0'+startUTCday.getUTCHours()).slice(-2)+":"+('0'+startUTCday.getUTCMinutes()).slice(-2)+":00.000Z"; 6 7//2018-11-07T06:00:00.000Z

投稿2018/11/07 07:34

tkshp

総合スコア174

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

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

m.ts10806

2018/11/07 07:35

「これよりスマートな方法」を更に探されているのでしたら「解決済み」にするのは違うと思います。 「解決済み」となった質問には回答がつきにくくなります。 私の回答はどこまで参考にされたのでしょうか・・・。
tkshp

2018/11/07 07:38

失礼しました。 toUTCString()も試してみましたが、文字列になってしまうので、substrで切り取っていかないと整形できないので、もう少し他の回答を知りたいと思いました。
m.ts10806

2018/11/07 07:49

回答にコード追記しました。 日付を文字列で取得できたならそれをDateオブジェクトに変換すれば良いだけかなと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問