2014-04-19 5 views
4

내 제작/heroku 응용 프로그램에서 아래 코드는 개발/로컬 응용 프로그램에서 실행될 때 아래 코드에 의해 반환 된 시간보다 7 시간 많은 시간을 반환합니다 . 왜 이런거야?Heroku Timezone Issue with Moment.js

var startDate = moment.tz("2000-01-01", "America/Edmonton").startOf('day'); 
var endDate = moment.tz("America/Edmonton"); 

hourly_count = parseInt(endDate.diff(startDate, 'hours') + 1); 
+0

비슷한 기괴한 일이 일어나고 있습니다. ("MMM DD, YYYY hh : mmA '). valueOf()'는'1398621600000'을 제공하지만 Heroku에서는 정확히 같은 이름으로 '1398600000000'을 제공합니다. 값. – marknadal

+0

@marknadal - 다른 문제입니다. 현지 시간으로 입력을 제공합니다. 'valueOf'는 UTC의 관점에서 유닉스 에포크부터 밀리 세컨드를 반영하는 타임 스탬프를 항상 제공합니다. –

답변

-1

배포하려는 대상 컴퓨터는 아마도 UTC 일 것입니다. 설정하거나 Moment Timezone을 사용하려고합니다. http://momentjs.com/timezone/

+0

질문은 이미 'tz' 함수를 사용하여 순간 - 시간대를 사용하여 보여줍니다. –

0

헤로 쿠에는 몇 가지 문제가 있습니다. UTC로 자동 계산됩니다.

코드

var tms = 1492554237000 

console.log(moment(tms).format("YYYY-MM-DD HH:mm:ss")) 
console.log(moment.utc(tms).format("YYYY-MM-DD HH:mm:ss")) 

로컬 출력

2017-04-19 06:23:57 
2017-04-18 22:23:57 

Heroku가 서버 출력

2017-04-18 22:23:57 
2017-04-18 22:23:57 

그것을 해결 타임 스탬프를 조정하여

if (moment().utcOffset() == -0){ 
    // for server 
    tms += 28800000 
} 

Heroku가 서버 출력 새

2017-04-19 06:23:57 
2017-04-19 06:23:57 
+0

질문에 대한 답변이 아닙니다. Heroku의 * local * 시간대가 UTC 일 것이라고 단순히 관측하고 있습니다. 물어 본 질문은 순간 * 시간대와 함께 * 이름이 지정된 * 시간대를 사용하는 것입니다. –

+0

또한 조정하는 방식이 잘못되었습니다. 그것은 완전히 다른 시점을 선택할 것입니다. 로컬 출력에서 ​​보여 주는 것이 실제로 UTC보다 8 시간 앞서 현지 시간대에있는 컴퓨터에서 볼 수있는 것입니다. –

0

당신이 순간 시간대로 명명 된 시간대를 지정하기 때문에, 로컬 컴퓨터와 서버 사이의 서로 다른 결과를 가지고 만 두 가지 이유가 있습니다 :

  • 시계가 기기 중 하나 또는 두 기기에서 올바르게 설정되지 않았습니다. 아마 Heroku의 시계는 괜찮 았으니 까.

  • 표준 시간대 데이터를 현재 시간대로로드하지 않습니다. 이전 버전의 모멘트 타임 존은이 경우 자동으로 현지 시간으로 되돌아갑니다. 최신 버전에서는 오류가 발생합니다.

    "데이터가있는"배포본 중 하나를 사용하거나 moment.tz.add 함수를 통해 관심이있는 시간대 데이터를로드해야합니다.

기회는이 질문에 2014 년에 기록 된 이후, 그것은 두 번째 문제였다입니다.