它是否已超过计算时间&日期?

时间:2014-01-16 12:44:51

标签: php date time

如果已经过了某个时间和日期,我必须检查一下。 通常这对我来说很容易,但是必须要检查的时间是我实际从数据库获得的时间之前半小时。

假设数据库说:“2014-01-16”和“20:00”。在这种情况下,我必须检查它是否已经过2014年januari 16日的“21:30”。

我现在有一些代码正在为我工​​作,但它只是说如果日期和时间都已过去那就过了那个日期(让我们说它是第二天所以它显然已经通过,它也必须在21:30过去它这么说)。

这是我到目前为止的代码:

// Get the date today and date of the event to check if the customer can still buy tickets
$dateToday = strtotime(date('Y-m-d'));
// $details['Datum'] == 2014-01-15
$dateStart = strtotime($details['Datum']);

// Check if it's half an hour before the event starts, if so: don't sell tickets
$timeNow = strtotime(date('H:i'));
// $details['BeginTijd'] == 20:00
$substrStart = substr($details['BeginTijd'], 0, 5);
$startTimeHalfHour = strtotime($substrStart) - 1800;

if($timeNow > $startTimeHalfHour && $dateToday >= $dateStart) {
    // It's past the given time limit
    $tooLate = true;
} else {
    // There's still time
    $tooLate = false;
}

如您所见,它需要时间和日期超过给定限制。在这个例子中,如果超过15,它应该将$ tooLate设置为true,或者如果它在15日过了21:30。

2 个答案:

答案 0 :(得分:2)

最好将DateTime字符串转换为Unix时间戳,以进行这样的比较。这可以使用DateTime类完成。例如:

$dateToday = new DateTime();
$date = new DateTime('2014-01-16 20:00');
// Adds an hour to the date.
$date->modify('+ 1 hour');

if ($dateToday > $date) {
  // Do stuff.
}

答案 1 :(得分:1)

您可以使用strtotime("+30 minutes")在30分钟内获得时间。

因此假设$ startTime是事件开始的时间(unix时间),你可以做

$current = strtotime("+30 minutes");

if($current > $startTime){
$tooLate = true;
}
else{
$tooLate = false;
}

顺便说一句,像$dateToday = strtotime(date('Y-m-d'));这样的行没有多大意义。写$dateToday = time();具有相同的结果。

strtotime()为您提供一个Unix时间戳(自1970年以来的秒数)。 time()也可以。

要生成$startTime(节目开始的时间),您应该使用完整的日期和时间字符串(例如2014-01-15 18:10:00)并将其传递给strtotime。它会将它转换为Unix时间。

如果您想要的是活动时间减去30分钟,您可以写下:

$maxTime = strtotime("-30 minutes",$startTime); //where $startTime is the start time of the event, in Unix time.

来源:http://il1.php.net/strtotime