0

我一直在撓我的頭,這一段時間了。我在我的用戶界面的前端使用了daterangepicker.js(http://tamble.github.io/jquery-ui-daterangepicker/)。我的實現非常基礎,可以在下面找到。問題是,每當我使用moment.unix()時間戳返回前一小時輸入的日期Daterangepicker/Moment JS - 錯誤的時間戳

<script type="text/javascript"> 
    $("#date-range").daterangepicker({ 
     datepickerOptions : { 
      numberOfMonths : 1, 
     }, 
     presetRanges: [{ 
      text: 'Last 7 Days', 
      dateStart: function(){return moment().subtract('days', 7)}, 
      dateEnd: function() { return moment() } 
     },{ 
      text: 'Last 30 Days', 
      dateStart: function(){return moment().subtract('days', 30)}, 
      dateEnd: function() { return moment() } 
     },{ 
      text: 'Last 3 months', 
      dateStart: function(){return moment().subtract('days', 90)}, 
      dateEnd: function() { return moment() } 
     },{ 
      text: 'Last 6 months', 
      dateStart: function(){return moment().subtract('days', 180)}, 
      dateEnd: function() { return moment() } 
     },{ 
      text: 'This Year', 
      dateStart: function(){return moment().startOf('year')}, 
      dateEnd: function() { return moment() } 
     }], 
     change:function(event, data){ 

      // gets inputted dates 
      var inputData = $('#date-range').daterangepicker('getRange'); 

      console.log(inputData); 

      // formats dates into unix time stamps 
      var start = moment(inputData.start).unix(); 
      var end = moment(inputData.end).unix(); 

      console.log(start); 

      // get current URL of the page (without query string) 
      var currentUrl = location.protocol+'//'+location.host+location.pathname; 

      // create new url 
      var newUrl = currentUrl+'?start='+start+'&end='+end; 

      // redirect to new URL 
      //window.location.href = newUrl; 
     } 
    }); 
</script> 

一個例子出來放這裏轉換擴展時間:正如你所看到的啓動郵票傳遞給我的那一刻JS是週一第2個月2017年午夜(這是正確的,反映了我在UI中選擇)

開始:週一至2017年10月2日00:00:00 GMT + 0100(GMT夏令時間){}

當我使用

var start = moment(inputData.start).unix(); 

它轉換成1506898800反映了2017年10月1日@下午11:00(UTC)

我已經試過時刻()。UTC()。

任何指針?

PS我知道我可以添加3600到時間戳,但寧願不這樣做,因爲我確信我錯過了一些相對簡單的事情。

感謝

+0

請注意,'1506898800'等於'2017-10-01T23:00:00 UTC',即'2017-10-02T00:00:00 + 0100'。 – VincenzoC

+0

@VincenzoC如何讓JS獲得這個結果。我嘗試過moment.local()。將3600添加到時間戳的唯一方法是? –

+0

對不起,但我不明白你的預期結果是什麼。如果你想將你的'inputData.start'解析爲UTC,請使用['moment.utc'](http://momentjs.com/docs/#/parsing/utc/)。 – VincenzoC

回答

0

首先,當轉換爲UTC Mon Oct 02 2017 00:00:00 GMT+0100 (GMT Daylight Time)等於 Sun Oct 01 2017 23:00:00 GMT+0000 (UTC)

秒,.unix()將返回1970年的秒數,相對於UTC時間。時間戳沒有時區。

解決方法是將時區固定爲指定的時區,並使用最安全的時區(UTC,無DST開關)。要做到這一點,嘗試包括moment-timezone頁面和初始化的日期選擇器前一次運行該代碼:

moment.tz.setDefault("UTC"); 

這樣,所有的日期將與UNIX兼容的時間戳。