1

今日発生した問題に遭遇しました (ここオーストラリア シドニーでは 1 月 31 日であるため)。基本的に、年、日、時、分、秒が与えられます。タイムゾーン (オーストラリア/シドニー) にいるかのように日付を作成し、それを UTC に変換します (つまり、ミリ秒を取得します)。

これは、データベース (およびサーバー) が UTC で動作し、クライアントが任意のタイムゾーンにいる可能性があるためです (ポスト リクエストが完了すると、クライアントはタイムゾーンと年、月、日の両方を提供します)。 、時、分、秒の値)

問題は、今日の日付を作成しているときに、今月の 1 月 3 日に日付をずらしてしまうことです。問題を示すコードは次のとおりです。

var scheduled, someTime, time, timeinfo, timezone;
process.env.TZ = 'UTC';
time = require('time');

timeinfo = {
    hour: 14,
    minute: '47',
    year: 2013,
    month: 1,
    date: 31
};

timezone = 'Australia/Sydney';
someTime = new Date(timeinfo.year, timeinfo.month - 1, timeinfo.date, timeinfo.hour, timeinfo.minute, 1, 1);
scheduled = time.Date(timeinfo.year, timeinfo.month - 1, timeinfo.date, timeinfo.hour, timeinfo.minute, 1, 1, timezone);
console.log(someTime);
console.log(scheduled);

これを Node.js で実行すると、出力される時間console.log(scheduled);が完全にオフになります。

注: time npm libraryを使用しています。

4

3 に答える 3

1

node-time がタイムゾーンを計算する方法のバグのようで、変換を行うときの操作の順序に関連しています。現在、github.com には未解決の問題 (#28) があります。

プル リクエストを送信しました。その間に試してみて、特定のケースで機能するかどうかを確認してください。

于 2013-01-31T07:15:56.353 に答える
0

次のコードを試してください

1.GMT時間について

var GMTtimeObj = new Date();

2.UTC 時間の場合:

var UTCtimeObj = +new Date();

それがあなたの要件に合っているかどうか教えてください。

この投稿の回答も参照してください。

于 2013-01-31T08:59:23.633 に答える
0

これは最近修正されたバグでした。https://github.com/TooTallNate/node-time/pull/30をご覧ください。

現在は完全に機能しています

于 2013-02-03T02:56:16.693 に答える