3

确定用户的时区服务器端并从 UTC 转换已证明比其价值更麻烦。

javascript / jquery是否有可靠的方法来确定用户的时区并将偏移量应用于UTC日期时间戳(2012-08-25 10:59:56.511479)并以我想要的格式输出(2012-08-25 - 10 :上午 59 点)?

jquery 代码可能会说什么

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

2 回答 2

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;
}

您可能希望使用日期格式插件以更简洁、更可靠的方式格式化日期。

于 2012-08-28T14:06:32.110 回答
0

另外,看看https://github.com/GregDThomas/jquery-localtime - 它把所有这些都包装在一个简单易用的 jQuery 插件中。

于 2013-02-12T09:55:10.940 回答