var time = new Date('2018-09-25 12:00:00'); console.log(time); // Tue Sep 25 2018 12:00:00 GMT+0900 (日本標準時)
となるんですが
Date が見ているタイムゾーンはどこで設定されてるんでしょうか
表示、パース時に文字列にTZ情報がないときデフォルトで
JST UTC 以外のタイムゾーンに設定することはできますか?
たとえば
var time = new Date('2018-09-25 12:00:00'); console.log(time); // Tue Sep 25 2018 12:00:00 (GMT-10:00) Hawaii var time = new Date('2018-09-25 12:00:00 JST'); console.log(time); // Tue Sep 24 2018 17:00:00 (GMT-10:00) Hawaii
となるようにしたいです
あと設定ではなく明示的にTZを与えてそのTZ時刻を出力するにはどうすればいいんでしょうか
var time = new Date('2018-09-25 12:00:00 JST');
time.toTZformat('UTC'); #Tue Sep 25 2018 3:00:00 UTC
みたいにタイムゾーン文字列と Date オブジェクトからそのタイムゾーン時刻の出力を得たいです
追記:
moment のおかげで
moment('2018-09-25 12:00:00').utcOffset(...).format() とすれば
任意のタイムゾーンで出力することはできるようになったんですが
タイムゾーン情報のない時刻文字列を特定のタイムゾーンとして読み込むことができなくて困ってます
var moment = require('moment-timezone');
moment.tz.setDefault("Asia/Tokyo");
あたりを使えばできるきがするんですが自分の環境では require が undefined になってしまうので
JSの範囲内ではできないでしょうか
例えばハワイ時間 -1000 として 2018-09-25 12:00:00 を読み込んで
moment('2018-09-25 12:00:00').utcOffset('540').format();
とやったときに日本時間 +900 で 19時間後の 9/26 7:00 という時刻になってほしいです
追記:
結局いろいろ試した結果最初に回答をいただいたとおり offset 加減することにしました
javascript 単体で見れば moment を使ったほうがきれいにかける気がするのですが
たとえばハワイのタイムゾーンの場合 Rails 側から渡せる timezone の情報が
(GMT-10:00) Hawaii
Hawaii
Pacific - Honolulu
-36000
の4つの文字列しかなく最初の3つを setDefault にいれても変わらなかったので
結局オフセットで加減するなら moment じゃなくても Date でいいかなと
const date = new Date('2018-09-25 12:00:00'); date.setTime(date.getTime() - date.getTimezoneOffset() + <%= Time.zone.utc_offset %>);// localに変換
という感じです
setDefault の引数のオフセットがとれればよかったのですが…
フレームワーク間のタイムゾーンの表現の差はいかんともできないので
もしうまく Rails の Time.zone からmoment-timezone の setDefault にわたせる方法があれば教えていただきたいです
追記:
別の質問で Rails 側から 地域/都市 形式のタイムゾーン文字列を取得する方法を教えていただいたので moment を使ってやりたいことができました
お答えいただいた方々本当のありがとうございました
回答3件
あなたの回答
tips
プレビュー