-1

我想使用当前时间戳并将下一分钟分配给数据库以执行某些 cron 功能。也就是说,如果是 7 小时 30 分 20 秒,那么我想从 7 小时 31 分 0 秒开始。我面临一些奇怪的问题。

如果我做-

$current_time_stamp = time() + 1*60;

它并不完全从下一分钟开始。但如果我这样做——

$current_time_stamp = number_format(time()/60);
$current_time_stamp = $current_time_stamp*60 + 1*60;

它在 1970 年给出了一些奇怪的时间。请指出错误。

4

4 回答 4

0
$time = time();
$time = strtotime(date(sprintf('Y-m-d H:%02d:00', floor(date('i', $time) / 5) * 5), $time)); // round up to 5 minutes

例如舍入到 5 分钟。一分钟会更容易

$time = strtotime(date('Y-m-d H:i:00', time()));
// you will get floor time.
$time = strtotime('+1 minute', $time); // increase time for 1 minute

你不能像这样使用时间戳。因为时间戳有闰年和时区的变化。简单的数学函数不考虑这一点。

于 2013-11-08T14:23:12.530 回答
0

您可以为此使用 time() 函数,不需要mktimestrtotime

$nextmin = ceil(time()/60)*60;

但是,strtotime可以这样使用

$nextmin=floor(strtotime("+1 minute"));

该函数number_format()需要至少两个参数,要格式化的数字和小数位数。您必须在其中输入小数位数。

于 2013-11-08T14:17:39.970 回答
0
$current_time_stamp = time() + 1*60;

这将起作用。当然,在开始 cronjob 时设置新的时间 - 而不是在最后,因为那时你需要减去 cron 的持续时间才能得到正好一分钟。

最好不要使用time(),而是使用数据库中的旧时间戳。

于 2013-11-08T14:17:54.643 回答
0

尝试这个:

$next_minute = mktime( date( 'H' ), date( 'i' ) + 1, 0 );

这实际上是一个捷径:

$next_minute = mktime( date( 'H' ), date( 'i' ) + 1, 0, date( 'd' ), date( 'm' ), date( 'Y' ) );

它所做的是根据提供的参数构造一个新的时间戳。

就像提供以下参数一样简单:

  1. 当前时间
  2. 当前分钟加一
  3. 零秒
  4. 当前的日期
  5. 这个月
  6. 今年

参考mktime()date()

仅供参考,number_format()将不起作用,因为它将时间戳转换为 PHP 无法用于计算的字符串(人类可读格式)。

于 2013-11-08T14:27:27.077 回答