Moment.jsおよびMoment-Timezoneフレームワークを使用し、明示的にUTCタイムゾーンであるMoment.js日付オブジェクトを持っています。それをブラウザの現在のタイムゾーンに変換するにはどうすればよいですか?
var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???
したがって、ユーザーのローカルタイムゾーンを調べることができれば問題ありません。または、日付オブジェクトを、実際に何であるかに関係なく、「ローカルタイムゾーン」を使用するだけの別のデータオブジェクトに変換したいと思います。
このために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
オブジェクトであるmoment
をmoment()
コンストラクターに戻すと、cloneが作成されることに注意してください。それ以外の場合、.local()
を呼び出すと、testDateUtc
値だけでなく、localDate
値も変更されます。モーメントはmutableです。
また、元の入力に+00:00
やZ
などのタイムゾーンオフセットが含まれている場合は、moment
を使用して直接解析できることに注意してください。 .utc
または.local
を使用する必要はありません。例えば:
var localDate = moment("2015-01-30T10:00:00Z");
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
私がやったことは次のとおりです。
var timestamp = moment.unix({{ time }});
var utcOffset = moment().utcOffset();
var local_time = timestamp.add(utcOffset, "minutes");
var dateString = local_time.fromNow();
ここで、{{ time }}
はutcタイムスタンプです。
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