0

나는 잠시 동안 내 머리를 긁적 댔다. 내 UI의 프런트 엔드에 daterangepicker.js (http://tamble.github.io/jquery-ui-daterangepicker/)를 사용하고 있습니다. 내 구현은 매우 기본적이고 아래에서 찾을 수 있습니다. 문제는 그 나는 타임 스탬프 날짜를 넣어이 여기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> 

예를 입력 일시간 전에 반환) (moment.unix를 사용하여 확장 시간을 변환 할 때마다 : 당신이 시작 스탬프 내 순간에 전달 볼 수 JS 자정 10 월 2017 년 (이 정확하고 나는 UI에서 선택한 것을 반영) 월 2 일입니다

시작 : 월 2017년 10월 2일 0시 0 분 0 초 GMT + 0100 (GMT 서머 타임) {}

내가 사용할 때

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

그것은 10/21/2017 @ 11:00 pm (UTC)을 반영하는 1506898800로 변환됩니다.

나는 utc()을 시도했습니다.

여기에 포인터가 있습니까?

추신 : 저는 타임 스탬프에 3600을 더할 수는 있지만 비교적 간단한 것을 놓치고있는 것처럼 확신하지 않기를 바랍니다. UTC로 변환 할 때

감사

모든
+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)Sun Oct 01 2017 23:00:00 GMT+0000 (UTC)에 같습니다.

초 .unix()는 UTC 시간이 인 1970 년부터 초를 반환합니다. 시간 소인에는 시간대가 없습니다.

해결 방법은 지정된 시간대를 지정하고 가장 안전한 시간대 (UTC, DST 스위치 없음)를 사용하여 시간대를 고정합니다. 그렇게하려면 페이지에 moment-timezone를 포함하여 시도하고 날짜 선택기를 초기화하기 전에 한 번이 코드를 실행 :

moment.tz.setDefault("UTC"); 

이 방법은 날짜의 모든 유닉스 타임 스탬프와 호환됩니다.