0

アプリケーションの一部としてタイムスタンプを使用していますが、Javascript と SQL Server で同時に作成されたタイムスタンプが異なる値を示すという問題があります。それらは同じコンピューターで実行されるため、システム クロックは問題になりません。

Javascript:

var now = new Date();

console.log( new Date(now.getUTCFullYear(),
        now.getUTCMonth(),
        now.getUTCDate(),
        now.getUTCHours(),
        now.getUTCMinutes(),
        now.getUTCSeconds()).valueOf() /1000);​

SQL サーバー 2012:

SELECT datediff(second,'1970-01-01 00:00:00.000',getutcdate())

datediff 引数の最初の部分が、1970 年 1 月 1 日を UTC で解釈していないのでしょうか?

テストするために、jsfiddle で JavaScript を実行し、管理スタジオで SQL を 1 ~ 2 秒以内に実行しました。

結果: Javascript: 1339348299 SQL Server: 1339384301

つまり、私のタイムゾーン オフセットである 36002 秒または 10 時間の差があります。

4

2 に答える 2

1

OK、比較するタイムスタンプを取得する 2 つの方法を次に示します...

Javascript

return Math.round(new Date().getTime()/1000.0);

SQLサーバー

SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())
于 2012-06-11T05:13:46.023 に答える
0

あなたが示していることに基づいて、2 つのシステムのうちの 1 つでタイムゾーンが正しく設定されていないと思います。これは、SQL と JavaScript のそれぞれで対応する getdate() (代わりに getUTCdate()) 関数を使用して比較することで確認できます。私の推測では、そのうちの 1 つが getUTCdate と同じものを返し、それを修正する必要があることを示唆しています。

于 2012-06-11T10:17:58.543 に答える