web-dev-qa-db-ja.com

Moment.jsの日付をユーザーのローカルタイムゾーンに変換する方法は?

Moment.jsおよびMoment-Timezoneフレームワークを使用し、明示的にUTCタイムゾーンであるMoment.js日付オブジェクトを持っています。それをブラウザの現在のタイムゾーンに変換するにはどうすればよいですか?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???

したがって、ユーザーのローカルタイムゾーンを調べることができれば問題ありません。または、日付オブジェクトを、実際に何であるかに関係なく、「ローカルタイムゾーン」を使用するだけの別のデータオブジェクトに変換したいと思います。

67
oliver

このためにmoment-timezoneを使用する必要はありません。メインmoment.jsライブラリには、UTCおよびローカルタイムゾーンを操作するための完全な機能があります。

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).local();

そこから、期待する機能を使用できます。

var s = localDate.format("YYYY-MM-DD HH:mm:ss");
var d = localDate.toDate();
// etc...

testDateUtcオブジェクトであるmomentmoment()コンストラクターに戻すと、cloneが作成されることに注意してください。それ以外の場合、.local()を呼び出すと、testDateUtc値だけでなく、localDate値も変更されます。モーメントはmutableです。

また、元の入力に+00:00Zなどのタイムゾーンオフセットが含まれている場合は、momentを使用して直接解析できることに注意してください。 .utcまたは.localを使用する必要はありません。例えば:

var localDate = moment("2015-01-30T10:00:00Z");
114
var dateFormat = 'YYYY-DD-MM HH:mm:ss';
var testDateUtc = moment.utc('2015-01-30 10:00:00');
var localDate = testDateUtc.local();
console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00
  1. 日付形式を定義します。
  2. モーメントオブジェクトを作成し、オブジェクトのUTCフラグをtrueに設定します。
  3. 元のモーメントオブジェクトから変換されたローカライズされたモーメントオブジェクトを作成します。
  4. ローカライズされたモーメントオブジェクトからフォーマットされた文字列を返します。

参照: http://momentjs.com/docs/#/manipulating/local/

15
AndrewHenderson

私がやったことは次のとおりです。

var timestamp = moment.unix({{ time }});
var utcOffset = moment().utcOffset();
var local_time = timestamp.add(utcOffset, "minutes");
var dateString = local_time.fromNow();

ここで、{{ time }}はutcタイムスタンプです。

4
sayan

UtcOffset関数を使用します。

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).utcOffset(10 * 60); //set timezone offset in minutes
console.log(localDate.format()); //2015-01-30T20:00:00+10:00
1