4

ブログにtimeagojQueryプラグインを使用していますが、タイミング自体に問題があるようで、指を置くことができず、問題の原因は何ですか。

現在、2011年5月31日02:30現地時間(GMT + DST)です。今私が使用した例の日付は...2011年5月31日02:01です。このための次のタグは

<abbr class="timeago" title="2011-05-31T02:01:44+00:00">May 31st, 2011</abbr>

しかし、jQueryは、日付が「今から32分後」であると出力します。これは、何らかの理由で1時間進んでいます。

誰かが私がここで間違っていることを知っていますか?

4

2 に答える 2

10

ここで推測を危険にさらすので、私はかなり間違っているかもしれません。

問題は、指定したtest timesatmpのオフセットが0UTCと同じであるということですが、GMTタイムゾーンでDSTを実行するときの時間とは異なります。

GMTはUTCと同じです。つまり、オフセットは0です。ただし、DSTについて言及している場合、夏時間に従うと、時計が1時間進み、UTCオフセットも進みます。したがって、UTCに関して、現在の時間は実際にはUTC + 0100です。そこから余分な時間が来ています。

最初にすべての時間をUTCに変換すると役立つ場合があります。結局のところ、それが目的ですよね?02:30 GMTDSTをフォローしている間は01:30 UTCです。したがって、これと比較すると、のテストタイムスタンプは02:01 UTC将来約30分です-したがって、32 minutes from now

代わりに表示することを期待していた場合は、時計の表示での時刻と同等のUTCタイムスタンプを表すために30 minutes agoテスト日付を指定する必要があります。2011-05-31T01:01:44+00:0002:01


最も安全な解決策は、常にUTCタイムスタンプを使用することです。これは、SO、Facebook、Twitterが投稿に日付を付ける方法です。UTCタイムスタンプは、各ユーザーのタイムゾーンに合わせて明確に解釈およびフォーマットできます。

したがって、あなたの仕事は、使用するタイムスタンプが単に文字盤に表示されるものではなく、それに相当するUTCであることを確認することです。現在のタイムゾーンでは、UTC時刻は表示されている時刻より1時間遅れている可能性があります。また、HTMLの生成に使用しているものに応じて、言語/プラットフォームに組み込まれている、またはサードパーティのライブラリとして、現在の時刻に相当するUTCを提供する関数を見つけることができるはずです。 DSTを考慮したタイムゾーンの時計。

于 2011-05-31T02:18:55.240 に答える
0

現在、2011年5月31日02:30現地時間(GMT + DST)です。

DSTが何であるかは言わないでください。上記のno.good.at.codingと同じように、+1時間であると想定します。

今私が使用した例の日付は...2011年5月31日02:01です。このための次のタグは

2011-05-31T02:01:44 + 00:00

協定世界時01:30である02:30にいます。あなたの日付は02:01UTCからです。これはあなたの時間の03:01であり、それから30分先になります。

提案されているように、とにかくすべての日付をUTCとして保存する必要があります。たとえば、Pythonにはdatetime.utcnow()メソッドがあります。常にUTCとして保存し、表示時にローカルタイムゾーンに変換します。

于 2011-06-01T13:45:47.877 に答える