模糊日期算法

32
我正在寻找一个模糊日期算法。我刚开始写了一个,但意识到这是多么繁琐的任务。它很快就变成了许多可怕的代码,以应对特殊情况,例如“昨天”、“上周”和“上个月末”,在某些情况下,它们都可以指同一天,但根据今天的日期分别是正确的。
我确信必须有一个开源的模糊日期格式化程序,但我找不到它。理想情况下,我希望使用NSDate(OSX/iPhone)及其格式化程序来实现,但那并不困难。是否有人知道一个模糊日期格式化程序,将任何相对于当前时间的时间段转换为返回字符串,如下所示(但不限于):
- 几分钟前 - 在过去的五分钟内 - 今天早些时候 - 今天早上 - 昨晚 - 上周 - 上个星期三 - 上个月初 - 去年六月 - 几年前
在理想的世界里,我希望字符串尽可能丰富(例如返回“刚才”等“刚才”的随机变体)。
澄清一下。我需要比基本桶和字符串更细致微妙的东西。我想要的是,它知道“昨天”和“上个星期三”都可以指同一段时间,但仅当今天是星期四时才是正确的。

你有实现这个吗?有计划发布你的工作吗? - Andrey Tarantsov
1
NSDate+timeAgo 类别/库,支持所需的日期格式和多种本地化:https://github.com/kevinlawler/NSDate-TimeAgo - kevinlawler
@kevinlawler +1 但不够微妙,我想要更加细致。 - Rog
@RogerNolan,你的库怎么样了?值得开源吗?我不认为iOS上有类似的东西存在。我简要地看了一下模糊日期问题的变体。我记不清自己是否认为它是不可能的还是仅仅是困难的了。 - kevinlawler
这是我在下面回答中发布的一个类别。如果我再看一遍,我不会使用我的代码。它很有趣,但过于复杂了。 - Rog
显示剩余4条评论
14个回答

0

请查看 Chrono,它是一个 JavaScript 启发式日期解析器。

Chrono 支持大多数日期和时间格式,例如:

Today, Tomorrow, Yesterday, Last Friday, etc
17 August 2013 - 19 August 2013
This Friday from 13:00 - 16.00
5 days ago
Sat Aug 17 2013 18:40:39 GMT+0900 (JST)
2014-11-30T08:15:30-05:30

https://github.com/wanasit/chrono


0

这通常是通过使用一个巨大的switch语句来完成的,实现起来非常简单。

请记住以下几点:

  • 始终首先测试最小的时间跨度
  • 不要忘记使您的字符串可本地化。

0

您可能会发现timeago源很有用。该插件的描述是“一个jQuery插件,使支持自动更新模糊时间戳(例如“4分钟前”或“大约1天前”)变得容易。”

它本质上是将Rail的distance_of_time_in_words函数压缩成一个jQuery插件的JavaScript端口。


0

我的公司有this .NET库,它可以做你想要的一部分功能,比如非常灵活的日期时间解析(包括一些相对格式),但只能输出非相对数据.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接