2012-10-10 6 views
4

자바 스크립트 신기원 날짜를 사용하여 현지 시간으로 레코드가 저장 될 때 표시하려고합니다. 문제는 그 시대가 CDT에 "붙어있는"것처럼 보입니다. 내가 displayDate 9 보여 기대신기원 날짜의 현지 시간 표시

var savedTime = 1349896693626; 
var sDate = new Date(); 
sDate.setTime(Number(savedTime)); 
var offset = sDate.getTimezoneOffset(); 
//grabbing offset and changing it to milliseconds to adjust time 
var milliOffset = offset * 60 * 1000; 
var adjustedDate = Number(savedTime) - milliOffset; 
var displayDate = new Date(adjustedDate); 
alert("date is " + displayDate); 

:

이 내 코드는 다음과 같다 1349896693626.의 JS 시대 날짜 값으로 DB에 들어가는 내가 중부 서머 타임 오전 9시 18분에서 레코드를 저장 말할 수 있습니다 : 18am, 그리고 내가 CDT에 있다면,하지만 내가 PDT로 이동하면 오전 5시 18 분을 표시하고 나는 왜 이해가 안돼. 마치 5 시간 (CDT 오프셋)으로 작동하도록하려면 오프셋을 하드 코드해야하는 것과 같지만 아무런 의미가 없습니다. 아무도 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

감사합니다.

+1

1349896693626 실제로 중부 서머 타임 오후 2시 18분입니다 : http://www.wolframalpha.com/input/?i=timestamp + 1349896693 + to + CDT – Roman

답변

0

특정 시간대 문자열을 표시하려면 현지 시간대를 무시하십시오.

GMT 시간 및 대상 시간대에 대한 올바른 오프셋에만주의해야합니다.

DST가 적용되는 범위에 따라 중앙 시간은 GMT보다 6 시간 또는 5 시간 늦습니다.

// standard time offsets 
Date.tzones={ 
    N:['Newfoundland', -210], 
    A:['Atlantic', -240], 
    E:['Eastern', -300], 
    C:['Central', -360], 
    M:['Mountain', -420], 
    P:['Pacific', -480], 
    AK:['Alaska', -540], 
    HA_:['Hawaii-Aleutian (Aleutian)', -600], 
    HA:['Hawaii-Aleutian (Hawaii)', -600, -1] 
}; 

//find the offset, accurate for US time zones since 2006 
Date.dstOff= function(d, tz){ 
    var off= tz[1], countstart, countend, dstart, dend; 
    var y= d.getUTCFullYear(); 
    if(off && tz[2]!= -1){ 
     countstart= 8, countend= 1, 
     dstart= new Date(Date.UTC(y, 2, 8, 2)), 
     dend= new Date(Date.UTC(y, 10, 1, 2)); 
     while(dstart.getUTCDay()!== 0) dstart.setUTCDate(++countstart); 
     while(dend.getUTCDay()!== 0) dend.setUTCDate(++countend); 
     dstart.setUTCMinutes(off); 
     dend.setUTCMinutes(off); 
     if(dstart<= d && dend>= d) off+= 60; 
    } 
    return off; 
} 
//format the result: 

Date.short_months= ['Jan', 'Feb', 'Mar', 'Apr', 
'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 

Date.toTZString= function(d, tzp){ 
    d= d? new Date(d):new Date(); 
    tzp= tzp || 'G'; 
    var h, m, apm= 'pm', off, dst, 
    label= tzp+'ST', str, 
    tz= Date.tzones[tzp.toUpperCase()]; 
    if(!tz) tz= ['Greenwich', 0]; 
    off= tz[1]; 
    if(off){ 
     dst= Date.dstOff(d, tz); 
     if(dst!== off) label= tzp+'DT'; 
     d.setUTCMinutes(d.getUTCMinutes()+dst); 
    } 
    else label= 'GMT'; 
    h= d.getUTCHours(); 
    m= d.getUTCMinutes(); 
    if(h>12) h-= 12; 
    else if(h!== 12) apm= 'am'; 
    if(h== 0) h= 12; 
    if(m<10) m= '0'+m; 
    var str= Date.short_months[d.getUTCMonth()]+' '+d.getUTCDate()+', '; 
    return str+ h+':'+m+' '+apm+' '+label.toUpperCase(); 
}; 

var d = new Date (1349896693626);

경고 ('중앙 시간 :'+ Date.toTZString (d, 'C'));

반환 값 (문자열) 중부 시간 : 10 월 10 중부 서머 타임 오후 2시 18분

관련 문제