0

月曜日の午前 0 時 PST に終了するカウントダウンを取得しようとしています。1週間前は動いていたと思っていましたが、どうやらそうではないようです。

私はdate.jsを使用しています

var monday = Date.today().next().monday();
var UTCmonday = new Date(monday.getTime() + monday.getTimezoneOffset() * 60000);
var PSTmonday = new Date(UTCmonday.setHours(UTCmonday.getHours() + 9));
$('#defaultCountdown').countdown({until: UTCmonday});

問題はUTC時間を決定することにあると思いますか? 私は正しいですか?どうすればこれを解決できますか?

4

2 に答える 2

1

太平洋標準時の場合、PST === UTC-8 であることを覚えておく必要があります。

したがって、3行目は次のようになります

var PSTmonday = new Date(UTCmonday.setHours(UTCmonday.getHours() - 8));

これの問題は、UTC が午前 8 時より前の場合に失敗することです。これは、 に負の数を渡すことができないためですsetHours

あなたは Datejs を使用しているので、タイムゾーンを変更するためにそのすべての機能を使用してみませんか?

http://code.google.com/p/datejs/wiki/APIDocumentation#setTimezone

于 2013-08-06T23:12:05.110 に答える
0

厳密に PST で時刻を取得することはあまり意味がありません。太平洋時間帯では 1 年のほぼ半分が PST ではないためです。冬には PST (UTC-8)、夏には PDT (UTC-7) が観測されます。太平洋時間を単なる固定オフセットとして表現することはできません。また、それがたまたま自分のローカル タイム ゾーンでない限り、タイム ゾーン データベースがなければ、それらの間の移行を簡単に判断することはできません。timezone タグ wikiを参照してください。

また、date.js は廃止されました。その使用を継続するソリューションはお勧めできません。Dancrumb が提案した方法のサポートsetTimezoneは文化固有のものであり、夏時間はまだ考慮されていません。

代わりに、moment.jsを試すことをお勧めします。moment-timezoneアドオンを使用してゾーンを操作できますAmerica/Los_Angeles。これは、米国太平洋時間の良い例です。moment-timezone-data.jsファイルに少なくともこのゾーンが含まれていることを確認してください。次に、次のことができます。

var m = moment().tz('America/Los_Angeles').day(7).startOf('day');

var s = m.toISOString();  // if you need a string output representing UTC
var dt = m.toDate();      // if you need an actual JavaScript Date object

それを少し分解してみましょう:

  • moment()現在の時刻を取得します
  • tz('America/Los_Angeles')興味のあるタイムゾーンに時間を調整します。
  • day(7)次の月曜日に時刻を進めます。
  • startOf('day')時刻を真夜中に戻します。
于 2013-08-07T15:35:41.480 に答える