node.jsでは、これはノードタイム(https://github.com/TooTallNate/node-time)を使用するとかなり簡単です。あなたができる
moment.fromTimezone = function(datetime, timezone) {
return moment(datetime, "YYYY-MM-DD HH:mm").setTimezone(timezone, true).setTimezone("UTC");
}
そして:さんはUTCに「入ってくる」日付/時刻文字列を変換するユーティリティ関数で投げてみましょう良い測定のために
var time = require('time')(Date),
moment = require('moment');
moment.fn.setTimezone = function(timezone, relative) {
this.toDate().setTimezone(timezone, relative);
return this;
}
moment.fn.getTimezone = function() {
return this.toDate().getTimezone();
}
:その後、moment.jsを拡張し、グローバルDateオブジェクトを上書き次の操作を行います。
var fmt = "YYYY-MM-DD HH:mm",
datetime = "2013-03-21 00:40",
timezone = "Israel",
m = moment.fromTimezone(datetime, timezone);
console.log(datetime, "in", timezone, "is", m.format(fmt), "in UTC");
console.log(m.format(fmt), "in UTC is", m.setTimezone(timezone).format(fmt), "in", m.getTimezone());
シェル出力:
$ node mtz.js
2013-03-21 00:40 in Israel is 2013-03-20 22:40 in UTC
2013-03-20 22:40 in UTC is 2013-03-21 00:40 in Israel
$
いいえ、https://github.com/mde/timezone-jsを使って変換することができます。 moment.js github trackerのこの問題(https://github.com/timrwood/moment/issues/162)も参照してください。いくつかのtz形式の動作は、Date.toString()実装のさまざまなものに非難されています。 timezone-jsも指しています。 –
私はこれが事実かもしれないと恐れ、やや否定的でした。 moment.jsは非常にエレガントで小さく、他のライブラリと一緒にそれを汚染するのは難しいようです。 :-( – Aitch