【问题标题】:Calculate time left with this?计算剩下的时间?
【发布时间】:2013-03-08 01:13:33
【问题描述】:

如果时间到了,我编写了一个脚本来将用户的密钥活动状态更改为 0。从那里开始时,我将 start_time 设置为 time();而不是像“60”这样设置多少天。

根据我目前的做法,我如何计算剩余时间(以天或小时或分钟为单位)。

$user_info['days'] = "60"

`start_time` = 1332219600


function setup() {
    mysql_connect('localhost', 'stresser_main', 'ZLLAUkuLIUU');
    mysql_select_db('stresser_main');
    $query = mysql_query("SELECT * FROM `keys` WHERE `active`='1'");
    while ($user_info = mysql_fetch_array($query)) {
        $time_ago = strtotime("-" . $user_info['days'] . " day");
        $time_ago_other = strtotime("+" . $user_info['days'] . " day");
        mysql_query("UPDATE `keys` SET `active`='0' WHERE `start_time` < $time_ago AND `id`='" . $user_info['id'] . "'");
    }
}

【问题讨论】:

  • strtotime(); 可以带两个参数,第二个是时间戳,即起始点(默认为现在),所以如果你这样做strtotime("+60 days", 1332219600);,它会告诉你过期的时间戳

标签: php time strtotime calc


【解决方案1】:
  1. 不要这样想。只更新查询。如果您有 1000 个活动 = 1 的用户已过期,那么您将执行 1000 次更新查询。这样,您将执行 1 个查询来解决您的问题。不需要 select 和 while。

    mysql_query("UPDATE keys SET active = 0 WHERE active = 1 AND start_time &lt; $something");

  2. 在 SQL 上执行所有操作,例如 'WHERE start_time &lt; NOW()'。您也可以对 sql 进行计算。这里有很多 SQL 函数https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html 这会更快、更安全。

  3. 不要使用 mysql_ 函数。使用 mysqli_ 或 PDO。

  4. 在表上使用日期时间字段,而不是整数 unix 时间戳。您将能够使用 SQL 日期函数。

  5. 使用 \DateTime() 代替 strtotime。

【讨论】:

  • PDO Imo 很烦人,mysqli 没有提供那么多功能,而 mysql 很好。
  • 现在使用mysqli :) 第一次使用;我真的很喜欢。
  • PDO 烦人? mysqli的功能比mysql少吗?我建议您尝试 OOP 并阅读有关 sql 注入的信息。另请阅读:php.net/manual/en/function.mysql-query.php mysql_ 已正式弃用。不再支持它。我给了你5分考虑。希望它会有所帮助。如果是,请评分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多