2012-08-28 3 views
3

사용자의 시간대 서버 측을 결정하고 UTC에서 변환하는 것이 그 가치보다 문제가되는 것으로 판명되었습니다.자바 스크립트를 사용하여 순진한 UTC 타임 스탬프를 현지 시간으로 변환하는 신뢰할 수있는 방법이 있습니까?

javascript/jquery가 사용자의 시간대를 결정하고 UTC 날짜 시간 스탬프 (2012-08-25 10 : 59 : 56.511479)에 오프셋을 적용하고 원하는 형식으로 출력합니다 (8 월 25 일 '12 - 오전 10:59)? JQuery와 코드가

// dom ready 
$('span.localtime').each(function(e) { 
    // get stamp and apply conversion 
}); 

답변

4

.getTimezoneOffset() 말을 어떻게 보이는지

날짜 개체에서 사용할 수 있으며 분 UTC로부터의 오프셋 (offset) 당신에게 제공합니다. 따라서

var offset = (new Date()).getTimezoneOffset(); 

// convert myUtcDate to a date in local time 
myUtcDate.setMinutes(myUtcDate.getMinutes() + (offset*-1)); 

:

$('.span.localtime').each(function() { 
    var myUtcDate = new Date($(this).html()); // assuming "2012-08-25 10:59:56.511479" 
    myUtcDate.setMinutes(myUtcDate.getMinutes() + (myUtcDate.getTimezoneOffset() * -1)); 

    $(this).html(myUtcDate.toString()); 
}); 

myUtcDate.toString() 원하는 포맷 어떤 날짜로 대체 될 수있다.

$(this).html(formatDate(myUtcDate)); 

function formatDate(d) { 

    var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; 

    var y = d.getFullYear().toString().slice(-2); // "12" 
    var m = months[d.getMonth()]; // "Aug" 
    var d = d.getDate(); // "25" 

    var ampm = 'AM'; 
    var h = d.getHours(); 

    if(h>=12) { 
     h -= 12; 
     ampm = 'PM'; 
    } 

    if(h == 0) 
     h = 12; 

    var min = ("00" + d.getMinutes()).slice(-2); 

    return m + " " + d + " '" + y + " - " + h + ":" + min + ampm; 
} 

당신은 깔끔한 더 신뢰할 수있는 방식으로 날짜를 포맷에 대한 date format plugin을 사용할 수 있습니다처럼 귀하의 경우에는, 그것은 보일 수 있습니다.

+0

오신 것을 환영합니다. jinja가 UTC 스탬프를 html로 보내는 경우 어떻게 date.timezoneoffset 분을 적용합니까? – chrickso

+0

@chrickso : 제 편집 참조. –

+0

나는 이것을 잘못 읽고 있니? 제가 UTC -5시라면 -300 분입니다. 그래서 setminutes + (-300 * -1)을 할 때, 5 시간을 추가하지 않습니까? – chrickso

관련 문제