确定用户的时区服务器端并从UTC转换已证明比其价值更麻烦。
是否有一种可靠的方法让javascript / jquery确定用户的时区并将偏移量应用于UTC日期时间戳(2012-08-25 10:59:56.511479)并以我想要的格式输出(8月25日& #39; 12 - 10:59 AM)?
jquery代码可能会说什么
// dom ready
$('span.localtime').each(function(e) {
// get stamp and apply conversion
});
答案 0 :(得分:4)
.getTimezoneOffset()
在日期对象上可用,并以分钟为单位为您提供UTC的偏移量。
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以更整洁更可靠的方式格式化日期。
答案 1 :(得分:0)
另外,看看https://github.com/GregDThomas/jquery-localtime - 它在一个简单易用的jQuery插件中包含了所有这些。