Как пройти секунды с полуночи

Используя 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";

... но он не возвращает правильное время сервера ответа, и я не знаю, как это сделать.

Ответ 1

Это должно работать.

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

Это покажет только часовой пояс вашего сервера.

Ответ 2

Проще всего я считаю, что деление текущего времени (в секундах) на количество секунд в день (60 * 60 * 24) и принятие остатка:

(time() % 86400)

Ответ 3

На основе вашего комментария, если вы получаете время как строку и хотите вычислить количество секунд с этого времени:

$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 и strtotime().

Ответ 4

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

Умножьте текущий час на количество секунд в каждом часе и добавьте его в количество минут, умноженное на количество секунд в каждую минуту.

Ответ 5

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

Ответ 6

Я думаю, вы хотите получить время от начала дня до текущих часов и секунд дня, это можно сделать так, вам все равно нужно будет установить время в часовом поясе вместо "Asia/Karachi". Это получает правильное время с полуночи в часовом поясе пользователя вместо времени часового пояса сервера.

Вот рабочая ссылка: 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 timezone midnight time
$date->setTimezone(new DateTimeZone('Asia/Karachi'));

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

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

//Print seconds since midnight in your timezone
echo $seconds_since_midnight;

Ответ 7

Самое короткое решение, вероятно, будет следующим:

$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, добавленный для предотвращения интерпретации времени как локального.

Ответ 8

Если вы используете DateTime:

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

Ответ 9

В Carbon количество секунд, прошедших с полуночи, можно найти следующим образом:

$seconds_since_midnight = $dt->secondsSinceMidnight();

И хотя нет никаких минут с полуночи, я полагаю, что вы делаете:

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