22

使用 PHP 如何获取自当天午夜以来经过的秒数?

我现在尝试的只是:

$hour=substr(date("h:i:s"),0,2);
$minute=substr(date("h:i:s"),3,2);
echo $hour."\r\n";
echo $minute."\r\n";

...但它没有返回响应的正确服务器时间,我不知道该怎么做。

4

10 回答 10

31

这应该有效。

echo time() - strtotime("today");

不过,这只会显示您的服务器时区。

于 2012-07-13T01:26:46.617 回答
24

我认为最简单的方法是将当前时间(以秒为单位)除以一天中的秒数(60*60*24),然后取余数:

(time() % 86400)
于 2014-12-01T14:06:37.403 回答
5

如果您使用日期时间:

 $timeDiff = $time->diff(new \DateTime("today")); 
 $timeDiffSec = $timeDiff->h* 3600 + $timeDiff->i*60 + $timeDiff->s;
于 2017-06-02T01:15:41.673 回答
3
echo (date('G') * 3600 + date('i') * 60);

将当前小时乘以每小时的秒数,然后将其与分钟数乘以每分钟的秒数相加。

于 2015-02-04T16:40:52.927 回答
3

我想你想从一天的开始到一天中的当前小时和秒,这可以这样做,你仍然需要设置你的时区时间来代替“亚洲/卡拉奇”。从用户时区的午夜开始,这将获得正确的时间,而不是服务器的时区时间。

这是工作链接: http ://codepad.viper-7.com/ykJC2R

//Get current time timestamp
$time_now = time();

//Create DateTime class object
$date = new DateTime(); 

//Set timestamp to DateTime object
$date->setTimestamp( $time_now );

//Set timezone so that code don't get server's timezone midnight time
$date->setTimezone(new DateTimeZone('Asia/Karachi'));

//Print current time in user's timezone
echo $date->format('Y-m-d H:i') . "<br />";

//Get time stamp for midnight tonight
$date->modify('today midnight');
$midnight_time = $date->getTimestamp();

//Print midnight time in user's timezone
echo $date->format('Y-m-d H:i') . "<br />"; 

    //Now you will need to subtract midnight time from current time in user's timezone
$seconds_since_midnight = $time_now - $midnight_time;

//Print seconds since midnight in your timezone
echo $seconds_since_midnight;
于 2015-10-06T17:24:21.503 回答
3

最短的解决方案可能是这样的:

$time = "12:34:56";
echo strtotime("{$time}UTC", 0);

这样做的原因是strtotime使用第二个参数来确定时间字符串的日期部分。在这种情况下,我使用的是0,这意味着完整的字符串会导致1970-01-01 12:34:56 UTC. strtotime然后返回 UNIX 时间戳(自 以来经过的秒数1970-01-01 00:00:00 UTC)。注意:已UTC附加第一个参数以防止将时间解释为本地时间。

日期时间(以微秒计)

比已经提到的解决方案更快(3 倍)和更精确的替代DateTime::diff方案:

$date = new DateTime;
[$h, $m, $s] = explode(':', $date->format('H:i:s.u'));
echo $h * 3600 + $m * 60 + $s;
于 2016-06-02T08:49:14.160 回答
2

根据您的评论,如果您以字符串形式接收时间并希望计算从该时间开始的秒数:

$time = strtotime($_GET['time']); // Do some verification before this step
$midnight = strtotime("00:00"); // Midnight measured in seconds since Unix Epoch
$sinceMidnight = $time - $midnight; // Seconds since midnight

你去吧。读入PHP 的time()函数和strtotime()

于 2012-07-13T01:28:02.607 回答
2

在 Carbon 中,从午夜开始经过的秒数可以这样计算:

$seconds_since_midnight = $dt->secondsSinceMidnight();

尽管自午夜以来没有几分钟,但我想您会这样做:

$minutes_since_midnight = (int) floor($dt->secondsSinceMidnight()/60);

于 2017-09-25T18:15:55.913 回答
1
echo time() - strtotime('today');
于 2012-07-13T01:28:47.470 回答
1

我坚持对数字的操作总是比对字符串的操作快的规则。当数字是整数时,操作会更快(因为 CPU 寄存器总是“整数宽”,意味着有 32 位或 64 位,所有其他非浮点类型在执行任何操作之前都转换为整数)。

无论如何,我发现这样的解决方案可以用时区计算到午夜的秒数,包括:

$tillmidnight = 86400 - (time() - mktime(0, 0, 0));

你想得到自午夜以来经过的秒数,所以:

$sincemidnight = time() - mktime(0, 0, 0);

最好也检查一下您的 php.ini 并在那里设置您的时区([Date] 部分下的 date.timezone)。如果您无权访问 php.ini,您可以使用 date_default_timezone_set() 在 PHP 代码中设置您的时区;功能。

于 2019-11-10T23:10:50.573 回答