0

开始时间、结束日期和结束时间变量。

日期变量被格式化yyyy-mm-dd

时间变量被格式化hh-mm(但是只有小时数可用,例如分钟总是 00)

我可以将这些变量插入我的数据库没有问题,但是在我这样做之前,我想检查开始日期和时间是否在结束日期和时间之前。我知道如何检查时间是否更早,日期是否更早,但我无法同时检查时间和日期,我会很感激任何帮助?

$_POST['start_time']
$_POST['end_time']
$_POST['start_date']
$_POST['end_date']

是变量以及我如何获取它们。

4

4 回答 4

7

使用DateTime对象让自己的生活变得简单:

<?php
// assuming the following values...
$_POST['start_time'] = '06:00';
$_POST['end_time'] = '10:00';
$_POST['start_date'] = '2012-01-01';
$_POST['end_date'] = '2013-06-02';

//set up two DateTime objects
$start = DateTime::createFromFormat('Y-m-d H-i', $_POST['start_date'] . ' ' . $_POST['start_time']);
$end = DateTime::createFromFormat('Y-m-d H-i', $_POST['end_date'] . ' ' . $_POST['end_time']);

// check if they're valid
if ($start < $end) {
  echo 'We are good...';
} else {
  echo 'Something bad happened...';
}

请记住,这假设您的$_POSTed 值是有效的。如果您尚未对其进行消毒,请try/catch至少将其包裹起来。

于 2013-04-16T13:12:04.677 回答
3
function getTime ($ymd, $hi) {
    return strtotime($ymd." ".$hi);
}
if (getTime($_POST['start_date'], $_POST['start_time']) < getTime($_POST['end_date'], $_POST['end_time'])) {
    echo "Ok!";
}

只需将其转换为 Unix 时间戳,然后进行比较。

于 2013-04-16T13:11:20.840 回答
2

我会用DateTime::createFromFormat()它。像这样:

$start = DateTime::createFromFormat('Y-m-d H-i',
             $_POST['start_date'] . ' ' . $_POST['start_time']);
于 2013-04-16T13:08:37.220 回答
0

尝试分解数组,然后使用 mktime() 函数将日期传递给秒。然后,只需比较两个日期,秒数越大越晚。

list($strHour, $strMin) = explode('-', $_POST['start_time']);
list($endHour, $endMin) = explode('-', $_POST['end_time']);
list($strYear, $strMonth, $strDay) = explode('-', $_POST['start_date']);
list($endYear, $endMonth, $endDay) = explode('-', $_POST['end_date']);

$startSeconds = mktime($strHour, $strMin, 0, $strMonth, $strDay, $strYear);
$endSeconds   = mktime($endHour, $endMin, 0, $endMonth, $endDay, $endYear);

if ($startSeconds > $endSeconds) {
    echo 'Start is bigger';
}
于 2013-04-16T13:07:46.257 回答