比较PHP中的日期字符串

时间:2015-12-18 10:06:56

标签: php validation date

在PHP中给出以下字符串:

$startDate = "2015-12-17";
$startTime = "11:16 AM";
$startTimezone = "(GMT +00:00) Dublin, London";

$endDate = "2017-12-17";
$endTime = "11:16 AM";
$endTimezone = "(GMT -06:00) Central Time";

格式始终为:

日期的YYYY-MM-DD

HH:MM AM | PM当时

确定是否是最好的方法:

  • 开始日期和时间不是过去的
  • 结束日期和时间不是过去
  • 结束日期和时间在开始日期和时间之后
  • (注意时区可以不同)

我猜测使用PHP DateTime类并比较它们,但不确定如何为我的用例构建它?

2 个答案:

答案 0 :(得分:2)

我没有测试它,但它应该是这样的:

$startDate = "2015-12-17";
$startTime = "11:16 AM";
$startTimezone = "+0000";

$endDate = "2017-12-17";
$endTime = "11:16 AM";
$endTimezone = "-0600";

$start = DateTime::createFromFormat("Y-m-d h:i A O", $startDate . ' ' . $startTime . ' ' . $startTimezone);

$end = DateTime::createFromFormat("Y-m-d h:i A O", $endDate . ' ' . $endTime . ' ' . $endTimezone);

$now = new DateTime();

if ($start > $now && $end > $now && $start < $end) {
    // do stuff
}

正如您所看到的,我使用了不同的时区格式。你可以自己选择一个。请参阅本页面的时区部分:http://php.net/manual/en/function.date.php

答案 1 :(得分:0)

试试这个,

<?php

$startDate = "2015-12-18";
$startTime = "3:53 PM";

$endDate = "2017-12-17";
$endTime = "11:16 AM";

$reset = date_default_timezone_get();

date_default_timezone_set('America/New_York');

$start = strtotime($startDate.$startTime);
$end = strtotime($endDate.$endTime);
$curTime   =   strtotime(now);

date_default_timezone_set($reset);



if($st_time < $curTime)
{
   // Start time is less than current time - not past
}

if($end < $curTime)
{
   // End time is less than current time - not past
}

if($end < $start)
{
   // End time is less than start time
}

?>

Some other methods在那里,但我在我的一个项目中试过这个并且没有任何问题。

我希望这会有所帮助。