3

我正在抓取一个网站,日期有两种形式:

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

这两个都是GMT-8。我想从中得到一个 unix 时间戳,这样我就可以构造一个有意义的日期对象

知道这可能是什么时区吗?大约一个月前,该网站正在使用 GMT-9 时间。javascript可以自动处理夏令时吗?

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

目前,我正在使用 Date.js' parseExact

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

但是,这似乎将 12AM 解析为12:00,而不是0:00。此外,我完全不知道如何处理以today @.

4

4 回答 4

1

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

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

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

更复杂的是,变化的日期与其他区域(例如欧洲)变化的日期不同。

我认为没有一种方法可以为 Date.js 指定时区值,可以自动将其考虑在内。

于 2011-11-22T16:59:32.543 回答
1

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

伪代码:

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

parse_timezone-aware(date)
于 2011-11-22T17:11:00.123 回答
0

使用小写h的小时来获得 1-12。大写H给出 0-23。从您的示例中,我将使用以下格式

MM-dd-yyyy hh:mm tt

文档

您应该单独处理“今天@”。当您找到该字符串时,预计下一个标记是表单中的时间hh:mm tt。将第二部分解析为时间并将其与今天的(本地)日期相结合。使用 Date.js 函数以编程方式做到这一点并不难,但您不会找到捕获“Today @”部分的单个格式字符串(如您所知)。

于 2011-11-22T16:58:39.300 回答
0

为什么不直接HHHH:mm zzz加到 12:00 呢?

于 2011-11-22T16:55:53.557 回答