Трудно сформулировать проблему, которая у меня есть в названии, но вот сценарий: я работаю с бэкэндом 3-этажного экзамена на веб-сайте. В настоящее время я обновляю свою функцию, используемую, когда студенты просят сдавать экзамен. Экзамен имеет даты и время начала и окончания, а также временные ограничения. То, что я хочу сделать, относится к случаю, когда количество времени, оставшегося в экзаменационном периоде, меньше, чем срок для экзамена. Например, период экзамена заканчивается в 5:00 вечера. Время пришло время: 16:30. Срок действия экзамена составляет полтора часа. Я хочу заменить час и половину времени на 30 минут. Для этого есть 3 даты, которые мне нужны, и я объясню, как я получаю каждый:PHP DateTime Вычитание и преобразование
Временная метка для моей страницы функций. Когда контроллер вызывает мою страницу, после открытия сеанса я установил часовой пояс по умолчанию в Америку/Нью-Йорк (мой регион). Чтобы получить временную метку, я использую код:
$ date = date ('Y-m-d H: i: s');
$ currenttime = date ('H: i: s', strtotime ($ date));
Я использую вызов функции в своей базе данных для получения ограничения по времени и времени окончания экзамена (я также использую даты для других сравнений, чтобы проверить наличие экзамена). Время окончания экзамена сохраняется в результирующем массиве $ res [10], а ограничение времени - $ res [11].
Предполагая, что срок для экзамена равен дате отметки времени, и он находится в периоде экзамена (2 проверки, которые я выполняю раньше), я хочу проверить, не отличается ли разница между текущим временем и концом экзамена меньше срока. Если время до окончания экзамена меньше срока, я хочу установить такое количество времени в качестве нового временного ограничения. Мой фронт ожидает моего результата в форме HH: mm: ss (эквивалент php - H: i: s). Поэтому, если до окончания экзамена 30 минут, а срок составляет полтора часа, я хочу, чтобы новый временной интервал составлял 30 минут (или 00:30:00). В настоящий момент мой код не работает. Я отвечаю критериям для оператора if, что является моим желаемым результатом. Когда я конвертирую его в форму H: i: s, где проблема, кажется, (я получаю результат около 19:00:00). Каждая статья, которую я прочитал, предлагает сделать это таким образом, но я, возможно, что-то пропускаю.
$compareTime = strtotime($res[10]) - strtotime($currenttime); if(compareTime < strtotime($res[11]){ $timelimit = date('H:i:s', $compareTime); }else{ $timelimit = $res[11]; }
Если есть лучший способ сделать это, я бы очень обязан знать. Я довольно новичок в php, и, по общему признанию, я понимаю, что это может быть странная проблема, но именно так решила группа.
Я не думаю, что есть лучший способ, вы можете использовать классы Datetime, но я не думаю, что это будет необходимо лучше – jdog
Я бы сделал все это через базу данных. Существует множество функций, позволяющих делать подобные вычисления, не беспокоясь о конверсиях. –
[Вы проверили это] (http://php.net/manual/en/datetime.diff.php)? Не прочитал ваш полный вопрос. –