【问题标题】:How to format Twitter/Facebook feed date with JavaScript如何使用 JavaScript 格式化 Twitter/Facebook 提要日期
【发布时间】:2012-10-30 05:06:43
【问题描述】:

我正在寻找这个确切问题的答案:How to format Facebook/Twitter dates (from the JSON feed) in Objective-C 仅在 JS 中。

有推荐的方法吗?

从 Twitter 返回的日期如下所示:Wed Oct 17 21:22:27 +0000 2012 从 FB 看起来是这样的:2012-10-18T11:21:30+0000

我觉得它们不包含 unix 时间戳很奇怪(而且非常烦人),有人知道这是什么原因吗?

【问题讨论】:

  • 在 JS 中似乎可以解析:jsfiddle.net/mgC6m
  • 这可能很烦人,但正如@Passerby 指出的那样,它是可解析的,因此可以很容易地进行操作。
  • 哦,如果可行,那就太棒了。不过,我想记住在 IE 中执行此操作时遇到的麻烦。目前无法测试。
  • @Passerby——并非所有使用的浏览器都能正确解析 ISO8601 字符串,Twitter 格式不符合任何日期标准,也不符合 ECMA-262。因此,仅仅因为在您可能尝试过的少数浏览器中“它有效”,它就不应该被信任。

标签: javascript date-format


【解决方案1】:

日期字符串解析是一个非常常见的问题,肯定已经有答案了。总之……

如果日期格式为 2012-10-18T11:21:30+0000(几乎是 ISO8601)并且偏移量始终为 +0000(即 UTC),您可以使用以下方法创建合适的日期对象:

function isoStringToDate(s) {
  var b = s.split(/[-t:+]/ig);
  return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5]));
}

这将返回为该 UTC 时间设置的本地日期对象。请注意,这取决于用户系统是否设置了适当的时区。

Facebook 格式(Wed Oct 17 21:22:27 +0000 2012)格式可以类似地转换:

function fbStringToDate(s) {
  var b = s.split(/[: ]/g);
  var m = {jan:0, feb:1, mar:2, apr:3, may:4, jun:5, jul:6,
           aug:7, sep:8, oct:9, nov:10, dec:11};

  return new Date(Date.UTC(b[7], m[b[1].toLowerCase()], b[2], b[3], b[4], b[5]));
}

再次假设它的偏移量总是 +0000 (UTC)。如果需要其他一些偏移量,可以在返回之前将其应用于创建的日期对象。

【讨论】:

  • 这看起来很有希望,但我得到“无效日期”...jsfiddle.net/MgT8d
  • 因为您将 ISO 日期格式传递给 fbStringToDate,反之亦然。 :-)
  • 大声笑,多么失败:P 它现在可以工作了:jsfiddle.net/MgT8d/1 尽管 fbStringToDate() 应该被称为 twitterStringToDate()。非常感谢!我已经测试了 Passerby 的建议,并且在 Chrome 中有效。不过,我会在测试 IE 时保留此代码,因为我记得它很久以前就无法在那里工作。
  • @powerbuoy——不要相信Date 构造函数或Date.parse 能够正确解析字符串,始终手动进行。您会发现浏览器无法解析其中任何一种格式,Twitter 尤其值得怀疑,因为它不符合 ISO8601 或 ECMA-262。
猜你喜欢
  • 2023-03-28
  • 2021-12-15
  • 2022-01-18
相关资源
最近更新 更多