如何以人类可读的方式优化显示持续时间?

时间:2012-06-08 13:15:05

标签: mysql perl

我想为我的项目实现一项功能。它与Stack Overflow上的一个功能非常相似,用户发布请求并获得响应。在Stack Overflow上我们看到帖子标记为4秒前,22秒前,1分钟前,5分钟前等。我想实现相同的。

我将请求发布时间存储在MySQL中的timestamp变量中,然后减去NOW() - stored_time以获取秒数。然后写一些逻辑,比如

  • 如果少于60秒,则显示60秒前
  • 如果差异在60到3600之间,则以分钟显示

等等。这个长逻辑是用Perl编写的。我想避免这种情况。有没有什么好方法可以达到同样的目的?我愿意改变MySQL表和数据类型。

2 个答案:

答案 0 :(得分:2)

向客户端发送经过的秒数,并将其转换为JavaScript中的人类可读文本。

答案 1 :(得分:1)

将日期戳检索为DateTime个对象。您没有显示数据库的任何详细信息,因此我必须在答案中跳过该步骤。

use DateTime qw();
use DateTime::Format::Human::Duration qw();

for my $seconds (555, 5555, 555555, 5555555) {
    my $now = DateTime->now;
    my $before = $now->clone->subtract(seconds => $seconds);
    my $formatted = DateTime::Format::Human::Duration
        ->new->format_duration($before - $now);
    $formatted =~ s/(?:,| and).*//;
    print "about $formatted ago\n";
}

# about 9 minutes ago
# about 1 hour ago
# about 6 days ago
# about 2 months ago