如何从午夜开始经过几秒钟

时间:2012-07-13 01:20:43

标签: php

使用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";

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

10 个答案:

答案 0 :(得分:27)

这应该有用。

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

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

答案 1 :(得分:17)

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

(time() % 86400)

答案 2 :(得分:3)

echo (date('G') * 3600 + date('i') * 60);

将当前小时乘以每小时的秒数,并将其加到分钟数乘以每分钟的秒数。

答案 3 :(得分:3)

如果您使用的是DateTime:

 $timeDiff = $time->diff(new \DateTime("today")); 
 $timeDiffSec = $timeDiff->h* 3600 + $timeDiff->i*60 + $timeDiff->s;

答案 4 :(得分: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()

答案 5 :(得分:1)

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

答案 6 :(得分:1)

我想你想从一天的开始到现在的当前时间和星期几,这可以这样做,你仍然需要设置你的时区时间来代替亚洲/卡拉奇& #39 ;.从用户的时区午夜开始,这是正确的时间,而不是服务器的时区时间。

这是工作链接: 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;

答案 7 :(得分:1)

最短的解决方案可能就是:

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

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

答案 8 :(得分:1)

在Carbon中,可以找到自午夜以来经过的秒数:

$seconds_since_midnight = $dt->secondsSinceMidnight();

虽然从午夜开始没有分钟我想你会这样做:

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

答案 9 :(得分:0)

我坚持这样的规则:对数字的操作总是比对字符串的操作更快。如果数字是整数,则运算速度甚至更快(因为CPU寄存器始终为“整数宽”,表示具有32位或64位,并且所有其他非浮点类型都将在执行任何运算之前转换为整数)。 / p>

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

$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代码中设置时区。功能。