开始时间,结束日期和结束时间变量。
日期变量的格式为yyyy-mm-dd
时间变量的格式为hh-mm
(但只有小时数可用,例如分钟始终为00)
我可以将这些变量插入到我的数据库中没问题,但在此之前我想检查开始日期和时间是否在结束日期和时间之前。我知道如何检查时间是否更早,日期更早,但我无法一起检查时间和日期,我将不胜感激任何帮助?
$_POST['start_time']
$_POST['end_time']
$_POST['start_date']
$_POST['end_date']
是变量以及我如何抓住它们。
答案 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';
}