3

この質問を読みました: JavaScript の日付を UTC に変換するにはどうすればよいですか?

これに基づいて、次のように dateTools モジュールにこの変換を実装しました。

[アップデート]

var dt, utcTime;
dt = new Date();
utcTime = new Date(Date.UTC(dt.getFullYear(), 
                                        dt.getMonth(), 
                                        dt.getDate(), 
                                        dt.getHours(), 
                                        dt.getMinutes(), 
                                        dt.getSeconds(), 
                                        dt.getMilliseconds()));

今度は単体テストを書きたいと思います。私の考えは、結果が実際に UTC であるかどうかを確認することでしたが、方法がわかりません。

すべての toString、toUTCString および同様のメソッドは、入力 (UTC 以外) および出力 (UTC) の日付に対して同じように見えます。

getTime メソッドの結果のみが異なります。

javascriptで日付がUTCかどうかを確認する方法はありますか? そうでない場合、これを単体テストするより良いアイデアはありますか?

より多くのコンテキストを提供するには:

it を UTC 文字列に変換するだけではあまり役に立ちません。次のステップで日付が Asp.net サービスに送信され、次のような文字列に変換されるためです。

'/Date([time])/'

このコードで

var aspDate = '/Date(' + date.getTime() + ')/';
4

2 に答える 2

10
var aspDate = '/Date(' + date.getTime() + ')/';

これは、タイムスタンプを表す内部UNIXepoch値 (UTC)を出力します。さまざまなtoStringメソッドを使用して、そのタイムスタンプのより詳細な文字列表現を取得できます。

  • .toString()ユーザーのタイムゾーンを使用すると、結果は次のようになり"Fri Jan 25 2013 15:20:14 GMT+0100"ます(少なくとも、私にとっては、別のタイムゾーンに住んでいる可能性があります)
  • .toUTCString()UTC を使用し、結果は次のようになります"Fri, 25 Jan 2013 14:20:15 GMT"
  • .toISOString()UTC を使用し、日付文字列を ISO に従ってフォーマットします。"2013-01-25T14:20:20.061Z"

では、必要な時間値をどのように構築すればよいでしょうか。

  • new Date()またはDate.now()現在の日時になります。ユーザーのタイムゾーンが何であれ、タイムスタンプは現在の瞬間です。
  • new Date(year, month, …)ユーザーのタイムゾーンを使用して、単一の値からタイムスタンプを作成します。これがユーザー コミュニティ全体で同じであることを期待するとしたら、大間違いです。時刻の値を使用せず、日付のみを使用する場合でも、奇妙な off-by-one エラーが発生する可能性があります。
    • setYear, setMonth, … およびgetYear, … メソッドを使用getMonthして、ユーザーのタイムゾーンに従って既存の日付に単一の値を設定/取得できます。これは、ユーザーからの入力/ユーザーへの出力に適しています。
    • getTimezoneOffset()これらすべてに使用されるタイムゾーンを照会できます
  • new Date(timestring)そしてDate.parse信用できない。明示的なタイムゾーン表示なしで文字列をフィードすると、UA はランダムに動作する可能性があります。また、適切な形式で文字列をフィードしたい場合は、それを受け入れないブラウザー (特に古い IE) を見つけることができます。
  • Date.UTC(year, month, …)UTC タイムゾーンの値からタイムスタンプを作成できます。これは、UTC 文字列の入出力に便利です。
    • すべての get/set メソッドには、これらのものにも使用できる UTC に相当するものがあります。

user-timezone の値を取得し、それらを UTC であるかのように使用するアプローチには欠陥があることがわかります。間違った出力方法を使用すると、正しく表示される可能性がありますが、それは、dtまたはutcTime間違った値を持っていることを意味します。

于 2013-01-25T14:36:36.493 に答える
0
  • getTimezoneOffset

    構文:object.getTimezoneOffset()このメソッドは、現地時間とグリニッジ標準時の差を分単位で返します。夏時間を使用する慣習があるため、ご想像のとおり、この値は一定ではありません。

すなわち

var myDate = new Date;
var myUTCDate = new Date(myDate - myDate.getTimezoneOffset() * 60000);
alert(myUTCDate);

注:60000は、1分間のミリ秒数です。

于 2013-01-25T13:51:54.883 に答える