如何将这些字符串解析为UTC日期?

问题描述:

我刮一个站​​点,日期有两种形式:如何将这些字符串解析为UTC日期?

11-22-2011 07:41 AM 
Today @ 07:41 AM 

这两者都是GMT-8。我希望得到一个unix时间戳,以便我可以构建一个有意义的日期对象

任何想法这可能是什么时区?大约一个月前,该网站被格林尼治标准时间9次。 JavaScript可以自动处理夏令时?

我很难解析它们。部分问题在于时区。

目前,我使用Date.js' parseExact

date = Date.parseExact(date + ' PDT', 'MM-dd-yyyy H:mm tt zzz'); 

Hovever,这似乎得到解析12AM为12:00,不0:00。另外,关于如何处理从today @开始的问题,我一直处于完全丧失状态。

+0

“上午12点” 是不明确;见http://en.wikipedia.org/wiki/Midnight – geoffspear

+0

@Wooble:我意识到。但是,当我收到上午12点时,我知道它应该在同一天早上被解释为'0:00' – Eric

+1

我不认为这个问题值得反对。这是一个完全合理的问题。 – LuxuryMode

为什么不直接添加HHHH:mm zzz即可获得12:00?

+0

HHHH做了什么? – Eric

小时使用小写字母h得到1-12。大写H给出0-23。从你的例子,我会用的

MM-dd-yyyy hh:mm tt 

Documentation

你应该处理的格式“今天@”分开。当您找到该字符串时,请期待下一个令牌为hh:mm tt形式的时间。将第二部分解析为时间,并将其与今天(当地)的日期结合起来。用Date.js函数编程并不难,但是您不会找到捕获“Today @”部分的单个格式字符串(如您所知)。

+0

哎呦。我复制了错误的代码行。我的意思是小写字母h – Eric

+0

问题是我今天不想要“本地” - 我今天想要“远程”。 – Eric

当我尝试使用交互式分析器http://www.datejs.com/的两个示例时,我会得到预期的结果。

有问题的时区可能是“美国西海岸”,又名“太平洋时间”。

不幸的是,这意味着在一年的不同时间不同的事情。在春夏两季,时区被称为“PDT”(GMT-0700),其余时间被称为“PST”(GMT-0800)。

使事情变得更加复杂的是,这些变化的日期与其他区域(例如欧洲)变化的日期不同。

我不认为有一种方法可以为Date.js指定一个时区值,并可以自动考虑这个值。

+0

'今天@'不能在边界附近工作。今天被忽略,所以它被错误地解析为“今天你在7:41 PST”,而不是“它在PST时区的那一天7:41”。因此,它可能会结束一天。 – Eric

+0

@Eric啊是的,好点。 – Alnitak

你可以编写自己的时区感知日期解析逻辑,它考虑到远程服务器的时区。

伪代码:

if date starts with "Today @" 
    replace "Today @" with currentDateInRemoteTimezone in date 
endif 

parse_timezone-aware(date) 
+0

我不知道如何获得'currentDateInRemoteTimezone' – Eric

+0

你将不得不找出服务器在哪个时区工作,并定义在解析时该时区与UTC有何不同。我没有说这很容易。对不起:) – Till

+1

你看过https://github.com/mde/timezone-js吗?我没有时间检查自己,但描述看起来可以派上用场。 – Till