【问题标题】:If it has gone more than 3 days since timestamp, then do action如果自时间戳以来已超过 3 天,则执行操作
【发布时间】:2015-01-22 16:09:24
【问题描述】:

我在$user_timestamp 中存储了一个特定的时间戳,例如1421942631。我将当前时间戳存储在$current_timestamp 中。

我想将此变量中的时间戳与当前时间戳进行比较,并检查它是否已经过去了 3 天。如果有,请采取行动。

如何在基本的if 语句中做到这一点?

【问题讨论】:

    标签: php date timestamp date-math


    【解决方案1】:

    虽然我通常建议使用 DateTime 进行日期数学运算,但您可以使用 strtotime() 的相对格式来保持简单。

    if($user_timestamp < strtotime('-3 days')) {
         // three days ago or more
    }
    

    但为了完整起见,这里是 DateTime 示例。

    $userTimestamp = new DateTime('@'.$user_timestamp);
    $threeDaysAgo  = new DateTime('-3 days');
    if ($userTimestamp < $threeDaysAgo) {
         // three days ago or more
    }
    

    【讨论】:

    • 您能否详细说明这是如何工作的。我刚刚测试了 strtotime() 示例,但它不起作用。请注意,我的时间戳存储在“$user_timestamp”中——编辑:可能是您的条件不正确,应该是小于,而不是大于。 .?
    • 你是对的。我的逻辑倒退了。试一试,看看是否能解决问题。
    • 我的朋友很好用。我有最后一个问题。就性能而言,采用这两种方法有什么不同吗?
    • 两者都会很快。 DateTime 更擅长处理时区和 DST,但对于像这样的基本比较,第一个示例就足够了。
    【解决方案2】:

    无需转换或使用其他功能。 3 天 = 259200 秒,所以应该可以:

    if( $user_timestamp < ( $current_timestamp-259200 ) ){
    

    【讨论】:

    • 这实际上是一种非常简单的方法,非常适合微优化。
    • 请记住,这是以牺牲可读性为代价的。 259200到底是什么意思?您将很难找到任何人都知道值代表什么。
    • 非常正确,我确实必须查一下。通常我会在// 259200 = 3 days 的行中添加评论
    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 2021-12-03
    • 2013-01-20
    • 2016-05-17
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多