开始日期和开始时间小于结束日期和结束时间验证

时间:2013-04-16 13:04:23

标签: php mysql date time jquery-ui-datepicker

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

日期变量的格式为yyyy-mm-dd

时间变量的格式为hh-mm(但只有小时数可用,例如分钟始终为00)

我可以将这些变量插入到我的数据库中没问题,但在此之前我想检查开始日期和时间是否在结束日期和时间之前。我知道如何检查时间是否更早,日期更早,但我无法一起检查时间和日期,我将不胜感激任何帮助?

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

是变量以及我如何抓住它们。

4 个答案:

答案 0 :(得分:5)

使用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...';
}

请记住,这假定您的$_POST ed值有效。如果您尚未对它们进行消毒,请至少将其包裹在try/catch中。

答案 1 :(得分: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时间戳,然后进行比较。

答案 2 :(得分:2)

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

$start = DateTime::createFromFormat('Y-m-d H-i',
             $_POST['start_date'] . ' ' . $_POST['start_time']);

答案 3 :(得分: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';
}