2010-03-22 107 views
2

我目前使用的是jQuery fullcalendar plugin,但我在英国遇到夏令时问题。夏令时生效后,小时数将以相差一个小时显示。如何解析UTC日期格式字符串到本地日期时间?

该问题似乎与插件解析功能。有人可以请我提供解析包含'Z'恶魔化的UTC字符串到当地日期时间显示的功能吗?

+0

是否可以至少添加一个示例日期。你不能指望人们调查这种类型的日期受到这种影响 – jitter 2010-03-22 09:12:52

回答

1

一些最初的混乱之后,你可能错过了反正(我和安迪·E和主要我的意见,他的回答的答案),我发现了什么似乎是真实的你的问题的原因。

该插件内部使用parseISO8601函数的相同代码,该函数由Andy E提出,来自Parsing W3C's ISO 8601 Date/Times in JavaScript

尽管Andy E指出该代码没有问题,但使用该代码的fullcalendar插件似乎也有一个bug。

的代码更加紧密地寻找后,我发现这个插件似乎忽略你在时区。

比较这些代码从原来的代码片段

段从delete.me.uk

从fullcalendar.js
if (d[14]) { 
    offset = (Number(d[16]) * 60) + Number(d[17]); 
    offset *= ((d[15] == '-') ? 1 : -1); 
} 

代码

if (!ignoreTimezone) { 
    if (m[14]) { 
     offset = Number(m[16]) * 60 + Number(m[17]); 
     offset *= m[15] == '-' ? 1 : -1; 
    } 
    offset -= date.getTimezoneOffset(); 
} 

正如你所看到的,如果ignoreTimezone设置为false,插件只处理时区。但那根本就不是这样。此插件中的parseISO8601()始终调用ignoreTimezone设置为true。

因此,我敢打赌,错误来自于此,你应该考虑联系插件的作者。但是首先,如果在插件代码中将ignoreTimezone设置为false,则应首先验证日期是否正确解析

1

我假设你的意思是一个ISO 8601日期字符串(UTC是时间标准,而不是显示格式)。我在生产环境中使用delete.me.uk的this function已经有几年了,没有问题在BST/GMT(我的本地时区)中进行测试。

+0

@jitter:你是在低估我已经修复的错误吗? (现在你已经编辑了你的评论,我没有意义......) – 2010-03-22 09:25:19

+0

@jitter:done。我只能为您提供自己使用该功能的经验 - 自2006年起在生产环境中使用它来解析eBay API日期字符串。在我当地的时区,BST和格林威治标准时间以及其他没有问题且没有任何客户报告的时区进行测试。 – 2010-03-22 09:36:13

+0

经过更多的调查,我发现真的是错的。因此删除了我的误导性评论,并收回downvote – jitter 2010-03-22 09:38:57

1

这可能会为你工作:

function parseDate(value) { 
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); 

    if (a) { 
     return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6])); 
    } 

    return null; 
} 
+0

试过了,不起作用。 – 2012-04-10 01:31:57

+0

它的工作:http://jsbin.com/urenok/edit感谢downvoting – 2012-04-10 10:38:30

相关问题