簡體   English   中英

javascript-UTC日期對象操作

[英]javascript - UTC date object manipulation

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日期對象的原因。

您可以像這樣從本地時間檢索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

或作為帶有一個班輪的日期擴展:

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()));
}

請指導我在哪里做錯了..?

您正在構建一個完全不同的時間utc_date ,該時間由於某種原因受到getTimezoneOffset 做就是了

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

要么

Date.now();

而且,如果您在UTC領域工作,則應使用d.setUTCHours而不是依賴於本地時區的setHours

實際上,我期望JS執行的操作是,如果我在Date構造函數中傳遞了時間戳,它應該使該對象帶有該時間戳,但它將其轉換為localtimezone ,這對我來說是個問題。

因此,為解決此問題所做的事情是通過傳遞所選日期的字符串來獲取date對象。

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中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM