1

UTCのことは本当に私を夢中にさせています...私はサイトの日付と時刻をUTCで取得しようとしているので、タイムゾーンの影響はありません。

私がしていること、私は日付オブジェクトを作成します

var d = new Date();

//convert it to utc
var utc = d.getTime() + (d.getTimezoneOffset() * 60000); 

var utc_date = new Date(utc);
utc_date.setHours(20,0,0)

console.log(utc_date.getTime()) // I want this to be same irrespective of timezone, but don't know why it is changing

私が間違っているところを教えてください..?

更新: http://jsfiddle.net/HNyj5/の ような時間のドロップダウンを作成したかったのは、ここでの概念は、選択した日付のクライアント側またはデータベースからタイムスタンプを使用し、このドロップダウンを動的に生成することです。したがって、サーバー/クライアントの両方でタイムスタンプを類似させたいので、UTC 日付オブジェクトを使用しようとしています。

4

3 に答える 3

1

次のように、現地時間からUTC日時を取得できます(例のタイムゾーン= GMT + 0100)。

var currentUTC = new Date; //=>Mon Mar 18 2013 13:53:24
currentUTC.setMinutes(currentUTC.getMinutes()+currentUTC.getTimezoneOffset();
 //=> currentUTC now: Mon Mar 18 2013 12:54:06

//or
var someUTC = new Date('1998/03/18 13:52'); //=> Wed Mar 18 1998 13:52:00
someUTC.setMinutes(currentUTC.getMinutes()+currentUTC.getTimezoneOffset();
 //=> someUTC now: Wed Mar 18 1998 12:52:00

または、1つのライナーを使用した日付拡張として:

Date.prototype.UTCFromLocal = function(){
  var a;
  return new Date(Date.prototype.setMinutes
          .call(a = this,a.getMinutes()+a.getTimezoneOffset()));
}
// usage (current date and time = Mon Mar 18 2013 14:08:14 GMT+0100
var d = new Date().UTCFromLocal(); //=> Mon Mar 18 2013 13:08:14

また、(UTC日時から)取得するには、次を使用できます。

Date.prototype.LocalFromUTC = function(){
  var a;
  return new Date(Date.prototype.setMinutes
          .call(a = this,a.getMinutes()-a.getTimezoneOffset()));
}
于 2013-03-18T12:57:52.697 に答える
0

実際、私がJSに期待していたのは、Dateコンストラクターにタイムスタンプを渡すと、そのタイムスタンプのwrtオブジェクトを作成する必要がありますが、それlocaltimezoneは私にとって問題を引き起こしているものに変換されます。

この問題を解決するために私がしたことは、選択した日付の文字列を渡すことで日付オブジェクトを取得することです。

var date = new Date(selected_date_str);タイムスタンプを渡すのではなく

UTCタイムスタンプを値として使用して時間のドロップダウンを作成していたため。ドロップダウンの開始hour:minは動的で、関数の引数として渡していましたfrom_hr.20:00からの時間のドロップダウンを作成したい場合は、パスしますfrom_hr = 20

だから今、私は選択した日付の時間を設定します

date.setHours(from_hr, 0, 0);

次にutc_time、ドロップダウンの値を作成するための変数を作成しました

var utc_time = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), from_hr, 0, 0, 0);

これはすべてのタイムゾーンで保持されます。これをベースとして使用します。次に、ループで15分の時間を追加していました

    var count = 0;
    jQuery(elem).html('');
    while(count <= 95){
        var option = '<option value="{0}">{1}:{2}</option>'.format(utc_time/1000, ('0' + date.getHours()).slice(-2), ('0' + date.getMinutes()).slice(-2)); //here i used a format prototype, which you can find in the jsfiddle link of my question
        jQuery(elem).append(option);
        utc_time += 15 * 60 * 1000; //adding 15 mins in the utc timestamp
        date.setMinutes(date.getMinutes() + 15)
        count++; }

utc_time を 1000 で割って PHP と互換性を持たせました。これは、ここから値を取得して db に保存するためです。

于 2013-03-22T16:41:12.857 に答える
0

私が間違っているところを教えてください..?

あなたは完全に異なる時代の を構築しutc_dateており、何らかの形でgetTimezoneOffset. やるだけ

var d = new Date();
d.getTime(); // milliseconds since epoch

また

Date.now();

また、UTC ランドで作業している場合d.setUTCHoursは、 local-timezone-dependent の代わりに使用する必要がありますsetHours

于 2013-03-18T12:55:57.013 に答える