Is there a JQuery plugin to convert UTC datetimes to local user timezone?
如果我有一个标签:
1 | <span class="utctime">2010-01-01 11:30 PM</span> |
我想要一个jquery脚本或插件将每个
好的,所以我创建了一个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /* Note: this requires that the JQuery-DateFormat plugin (available here) be loaded first http://plugins.jquery.com/project/jquery-dateFormat */ (function ($) { $.fn.localTimeFromUTC = function (format) { return this.each(function () { // get time offset from browser var currentDate = new Date(); var offset = -(currentDate.getTimezoneOffset() / 60); // get provided date var tagText = $(this).html(); var givenDate = new Date(tagText); // apply offset var hours = givenDate.getHours(); hours += offset; givenDate.setHours(hours); // format the date var localDateString = $.format.date(givenDate, format); $(this).html(localDateString); }); }; })(jQuery); |
用法:
1 2 3 | <span class="utcdate">2/5/2010 10:30 PM</span> $('.utcdate').localTimeFromUTC('MM/dd/yyyy hh:mm a'); |
使用输入日期查找时区偏移量。对于DST更改很重要。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | (function ($) { $.fn.localTimeFromUTC = function (format) { return this.each(function () { // get provided date var tagText = $(this).html(); var givenDate = new Date(tagText); if(givenDate == 'NaN') return; // get time offset from browser var offset = -(givenDate.getTimezoneOffset() / 60); // apply offset var hours = givenDate.getHours(); hours += offset; givenDate.setHours(hours); // format the date var localDateString = $.format.date(givenDate, format); $(this).html(localDateString); }); }; })(jQuery); |
像......一样使用它
1 2 3 4 5 6 7 8 | function ConvertDatesToLocalTime() { $('.ConvertUtcToLocal').localTimeFromUTC('MM/dd/yyyy hh:mm:ss a'); } $(document).ready(function () { ConvertDatesToLocalTime(); }); |
将"ConvertUtcToLocal"类分配给需要转换的所有元素。
1 2 3 4 5 6 7 8 9 | $(".localdatetime").each(function () { var datestr = $(this).text(); //alert(datestr); if (datestr.trim() != '') { var dateOb = (new Date(Date.parse(datestr, 'MM-dd-yyyy HH:mm'))).setTimezone("GMT").toString('dd MMM yyyy hh:mm tt'); //alert(dateOb); $(this).text(dateOb); } }) |
这也可以与Date.js库一起使用,以在用户时区中显示时间
当我使用它时,我不得不改变这条线
1 | var hours = givenDate.getHours(); |
至
1 | var hours = givenDate.getUTCHours(); |
通过这个调试时,行
所以完整的事情是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /* Note: this requires that the JQuery-DateFormat plugin be loaded first http://plugins.jquery.com/project/jquery-dateFormat */ (function ($) { $.fn.localTimeFromUTC = function (format) { return this.each(function () { // get time offset from browser var currentDate = new Date(); var offset = -(currentDate.getTimezoneOffset() / 60); // get provided date var tagText = $(this).html(); var givenDate = new Date(tagText); // apply offset var hours = givenDate.getUTCHours(); hours += offset; givenDate.setHours(hours); // format the date var localDateString = $.format.date(givenDate, format); $(this).html(localDateString); }); }; })(jQuery); |
请参阅另一个问题,了解我如何将它与timeago插件结合使用。
CodeGrue非常感谢与社区分享这一点。
对于那些被迫使用其他时区而不是UTC的人来说,你可以通过添加这样的时差来改变这个功能:
原始片段:
1 | var offset = -(currentDate.getTimezoneOffset() / 60); |
片段已更改为与CEST时区一起使用(时区偏移:UTC + 2小时):
1 | var offset = -(currentDate.getTimezoneOffset() / 60 + 2); |
等等。