有没有一种可靠的方法将天真的UTC时间戳转换为使用javascript的本地时间?

时间:2012-08-28 14:03:12

标签: javascript jquery datetime timezone

确定用户的时区服务器端并从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
});

2 个答案:

答案 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插件中包含了所有这些。