Я получаю такие форматы даты и времени, как это:
08:18:00 07/11/2013 7/11/2013 9:11:00 AM
Как преобразовать каждый из них в формат, чтобы я мог написать PHP, как это, чтобы узнать, какая из них – более поздняя дата / время?
// $time1 will always be in HH:MM:SS MM/DD/YYYY format. $time1 = "08:18:00 07/11/2013"; // $time2 will always be in MM/DD/YYYY HH:MM:SS format. $time2 = "7/11/2013 9:11:00 AM"; $time_one = $mytimeconvertdate_time_first($time1); $time_two = $mytimeconvertdate_date_first($time2); if ($time_two > $time_one) { echo "time_two is later" . "\n"; } else { echo "time_one is later" . "\n"; }
Я пробовал это, но второе значение не содержит информации о дате:
<?php date_default_timezone_set('America/New_York'); // $time1 will always be in HH:MM:SS MM/DD/YYYY format. $time1 = "08:18:00 07/11/2013"; // $time2 will always be in MM/DD/YYYY HH:MM:SS format. $time2 = "7/11/2013 9:11:00 AM"; $dt1 = DateTime::createFromFormat("H:i:sm/d/Y", $time1); $dt2 = DateTime::createFromFormat("m/d/YH:i:s", $time2); var_dump($dt1); var_dump($dt2); if ($dt1 < $dt2) echo "The first is earlier"; ?>
Выход:
object(DateTime)#1 (3) { ["date"]=> string(19) "2013-07-11 08:18:00" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "America/New_York" } bool(false)
Исправлено:
<?php date_default_timezone_set('America/New_York');
// Примечание: «Один – 24-часовой формат, а другой – 12 часов с am / pm».
// $time1 will always be in HH:MM:SS MM/DD/YYYY format. $time1 = "08:18:00 07/11/2013"; // $time2 will always be in MM/DD/YYYY HH:MM:SS format. $time2 = "7/11/2013 9:11:00 AM"; $dt1 = DateTime::createFromFormat("H:i:sm/d/Y", $time1); $dt2 = DateTime::createFromFormat("m/d/Y g:i:sa", $time2); var_dump($dt1); var_dump($dt2); if ($dt1 < $dt2) echo "The first is earlier" . "\n"; ?> object(DateTime)#1 (3) { ["date"]=> string(19) "2013-07-11 08:18:00" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "America/New_York" } object(DateTime)#2 (3) { ["date"]=> string(19) "2013-07-11 09:11:00" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "America/New_York" } The first is earlier
Используйте DateTime::createFromFormat
для создания двух экземпляров DateTime
из форматированного текста. Затем вы можете сравнить экземпляры напрямую, чтобы найти, что было раньше времени.
$dt1 = DateTime::createFromFormat("H:i:sm/d/Y", $time1); $dt2 = DateTime::createFromFormat("m/d/Y g:i:sa", $time2); if ($dt1 < $dt2) echo "The first is earlier"; // etc
Используя Carbon (который является API для родного DateTime PHP), вы можете просто сделать:
<?php $time_one = Carbon::create(2013, 11, 7, 8, 18, 00); // 08:18:00 07/11/2013 $time_two = Carbon::create(2013, 11, 7, 9, 11, 00); // 7/11/2013 9:11:00 AM if ($time_two->gt($time_one)) { echo "time_two is later\n"; } else { echo "time_one is later\n"; }
РЕДАКТИРОВАТЬ:
Конечно, вам не нужно использовать углерод для достижения желаемого результата. Но посмотрите на источник Carbon на GitHub, чтобы посмотреть, как это делается, и вы узнаете, как добраться до своей цели с помощью некоторых примеров. Это просто благие намерения.
Вы можете сделать следующее:
$date1 = date("YmdHis", strtotime("08:18:00 07/11/2013")); $date2 = date("YmdHis", strtotime("08:18:00 07/11/2013")); if($date2 > $date1) ...