0

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

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

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

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

4

2 回答 2

2

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

于 2012-06-08T13:17:17.173 回答
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
于 2012-06-08T13:44:00.847 回答