【问题标题】:Check if time elapsed since date is more than X days检查自日期以来经过的时间是否超过 X 天
【发布时间】:2014-11-10 23:42:50
【问题描述】:

我需要创建一个 PHP 脚本,它从数据库(日志、消息、登录等)中提取各种内容的时间戳,并在它们超过 X 天时将其删除。我不善于花时间完成工作,并且对最好的方法感到困惑。

我意识到我可以使用 explode() 将字符串中的日/月/年分开,并将它们与一堆 If 语句进行比较,但我想使用更有效的方法。像以下这样的正确方法是正确的吗?

$dt = "2011-03-19 10:05:44";

//if $dt is older than 90 days
if((time()-(60*24*90)) > strtotime($dt))
{

}

从 time() 中减去(分钟*小时*天)还是数字有误?

【问题讨论】:

  • 你可以运行delete from foo where your_time < (NOW() - INTERVAL X DAYS)
  • 这是一个不错的选择,尽管它比我的示例更深入一些,因此在这种情况下在 PHP 中使用 DT 可能更适合。
  • 好吧,我可以回答您发布的内容,而不是猜测您遗漏了什么
  • 您确定 NOW() - DAYS 有效吗?我刚刚尝试 SELECT * FROM tbladminlog WHERE logintime > (NOW() - 5) 提取过去 5 天的记录,它只返回今天的记录。
  • 啊,这是“DAY”而不是“DAYS”。谢谢,我想我也会用这个:)

标签: php datetime time timestamp unix-timestamp


【解决方案1】:

您可以为此使用DateTime 类。示例:

$dt = "2011-03-19 10:05:44";
$date = new DateTime($dt);
$now = new DateTime();
$diff = $now->diff($date);
if($diff->days > 90) {
    echo 'its greater than 90 days';
}

【讨论】:

  • 这正是我想要的,谢谢。我不知道 DateTime 类。
  • 因为他是从数据库中删除的,所以没有必要仅仅为了做日期函数而提取它们
  • @Dagon 实际上是的,也可以在查询中使用间隔
  • Dagon:你说得对,但在这种情况下,我有关联的表,例如“message”和“message_replies”。我需要找到较旧的消息,然后根据该消息的 ID 删除每个回复,为什么我必须走这条路。
  • 我头脑简单,所以我只会按照我所知道的去做,而不是把它复杂化并搞砸一些事情。不过谢谢你:)
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 2011-10-31
  • 2015-12-23
  • 2011-01-24
相关资源
最近更新 更多