0

私は今この間私の頭を傷つけてきました。私は、私のUIのフロントエンドで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が深夜に2017年10月(これが正しいと私はUIで選択したものを反映して)月2日である

スタート:月2017年10月2日00:00:00 GMT + 0100(GMT夏時間){}

私が使うとき

これは1506898800に変換され、10/01/2017 @ 11:00 pm(UTC)を反映します。

私はmoment()、utc()を試しました。

ここにはどのようなポインタがありますか?

PS私はタイムスタンプに3600を追加することができますが、私は比較的単純なものが欠けていると確信しているので、この方法ではしたくないと思います。

おかげで、すべての

+0

「1506898800」は、「2017-10-02T00:00:00 + 0100」と同じ「2017-10-01T23:00:00 UTC」に等しいことに注意してください。 – VincenzoC

+0

@VincenzoCこの結果を返すには、どのようにしてJSを取得するのですか?私はmoment.local()を試しました。タイムスタンプに3600を追加する唯一の方法はありますか? –

+0

申し訳ありませんが、私はあなたの期待される結果が何かを理解していませんでした。 'inputData.start'をUTCとして解析したい場合は、[' moment.utc'](http://momentjs.com/docs/#/parsing/utc/)を使用してください。 – VincenzoC

答えて

0

まず、Mon Oct 02 2017 00:00:00 GMT+0100 (GMT Daylight Time) UTCに変換されたとき Sun Oct 01 2017 23:00:00 GMT+0000 (UTC)に等しいです。

秒.unix()は、UTC時刻を基準に1970年から秒を返します。タイムスタンプにはタイムゾーンがありません。

解決策は、タイムゾーンを指定されたものに固定し、最も安全なもの(UTC、DSTスイッチなし)を使用してタイムゾーンを修正しています。これを行うには、ページへのmoment-timezoneを含めて試してみて、日付ピッカーを初期化する前に一度、このコードを実行します。

moment.tz.setDefault("UTC"); 

この方法では、あなたの日付がすべてのUNIXタイムスタンプと互換性があります。

関連する問題