2014-06-16 1 views
0

내가 이상한 이유로 Node.js를 가진 세계 시계와 timezone-js시간대-JS 간단한 샘플 이상한 행동

을 구현하려고, 나는 그것이 같은 안녕하세요 세계 프로그램을 작동하도록 어떤 예를 찾을 수 없습니다.

그래서 여기 내 시도입니다 :

var timezoneJS = require('timezone-js'); 

timezoneJS.timezone.zoneFileBasePath = './tz'; 
timezoneJS.timezone.init(); 

var getTime = function(timezone) 
{ 
    var UTC = new timezoneJS.Date(new Date(), 'Etc/UTC'); //for unknown reason this works only for Etc/UTC 

    var YYYY = UTC.getFullYear(); 
    var MM = UTC.getMonth() + 1; 
    var DD = UTC.getDate(); 
    var hh = UTC.getHours(); 
    var mm = UTC.getMinutes(); 
    var ss = UTC.getSeconds(); 

    var dt = new timezoneJS.Date(YYYY, MM, DD, hh, mm, ss, timezone); 

    var date = dt.getFullYear() + '/' + (dt.getMonth() + 1) + '/' + dt.getDate(); 
    var time = ('0' + dt.getHours()).slice(-2) + ':' + ('0' + dt.getMinutes()).slice(-2) + ':' + ('0' + dt.getSeconds()).slice(-2); 

    var datetime = date + ' ' + time; 
    return datetime; 
}; 

log(getTime('Europe/London')); 
log(getTime('America/New_York')); 

그 결과는 간다 : 런던과 뉴욕에 같은

$ node app 
'2014/7/16 14:30:40' 
'2014/7/16 14:30:40' 

합니다. 어떻게 될까요? 내가 고칠 방법을 알려줘.

감사합니다.

+0

월 Jun 16 2014 16:28:24 * GMT + 0100 * (Romance Standard Time), 귀하의 날짜에 GTM은 어디에 있습니까? – jmingov

+0

죄송합니다, 귀하의 질문에 이해가되지 않습니다. 문제는 다음 답으로 해결됩니다. 감사! –

답변

1

당신은 함수의 첫 번째 부분을 생략 할 수 단순히이 수행해야합니다

var dt = new timezoneJS.Date(Date.now, timezone); 

당신이 그것을 작성한대로 작동하지 않는 이유, 당신이 날짜를 초기화하고 있다는 것입니다 두 개의 다른 시간대에서 같은 해/월/일 /시/분/초로 변경하십시오. 즉, 현재 시간을 나타내는 것이 아니라 UTC 오프셋으로 실수로 잘못 이동 한 것입니다.

moment-timezone 또는 one of the other libraries listed here 일 수도 있습니다.

+0

좋은 답변입니다. 나는 한 때를 알고있었습니다.하지만 잊어 버렸습니다. 그 세트는 정말로 유망 해 보인다. 고마워, 매트. –