У меня есть простой DateTime урок. Я сравниваю 2 объекта DateTime, и они не работают правильно. Я попытался поменять местами, и все еще не удается. Он не работает, когда я ввожу текущую дату вручную, даже если дата такая же. Я должен ввести дату вручную, хотя. Спасибо за любую помощь. Heres функция:php DateTime сравнение объектов
function dtcompare(){
//I make the date the same as the current
//date and it doesnt echo that its equal.
$date1 = new DateTime('5/9/2015'); //a date entered
$date2 = new DateTime(); //the current date
$mdy = 'n/j/Y'; //the format
if($date1 == $date2){
echo "d1 == d2"; //This should be echoing
}
elseif($date1 > $date2){
echo "d1 > d2";
}
elseif($date1 < $date2){
echo " d1 < d2 "; //but this always echos
}
}
Я изменил все, чтобы сделать сравнения формата, но сейчас самые низкие даты вторят даже когда я кладу в будущем. Вот что происходит:
function dtcompare(){
$date1 = new DateTime('5/18/2015'); //a future date
$date2 = new DateTime(); //the current date
$mdy = 'n/j/Y'; //the format
if($date1->format($mdy) == $date2->format($mdy)){
echo "d1 == d2";
}
elseif($date1->format($mdy) > $date2->format($mdy)){
//This will echo if the date is in the next month 6/1/2015
echo "d1 > d2";
}
elseif($date1->format($mdy) < $date2->format($mdy)){
//This echos even though it's not 5/18/2015 yet!
echo $date1->format($mdy)."d1 < d2".$date2->format($mdy);
}
}
Я играл с этим, и я получил его на работу, используя некоторые из обоих. Я думаю, что это не значит, что он должен работать и может вызвать проблемы с какой-то другой датой, о которой я не знаю. Вот что я сделал:
function dtcompare(){
$date1 = new DateTime('5/12/2015'); //a future date
$date2 = new DateTime(); //the current date
$mdy = 'n/j/Y'; //the format
//Using the datetime->format for == comparisons and the other
//way for datetimes greater or less than. This works, but I think this is NOT
//how this should work though. It feels like a rig for something that
//should work one way (DateTime->format() comparison) or another (DateTime comparison w.o format)
if($date1->format($mdy) == $date2->format($mdy)){
echo 'date1 and date2 have the same date and time';
}
elseif($date1 > $date2){
echo 'date1 > date2 meaning its a later date and time';
}
elseif($date1 < $date2){
echo 'date1 < date2 meaning its an earlier date and time';
}
}
Спасибо за ответ. Я обновил то, что вы предлагаете, но объект DateTime говорит, что более высокая дата (5/18/2015) ниже сегодняшней даты (5/9/2015). Это же сравнение работает, если я сравню w.o с использованием $ date-> format(). Должно ли это работать в любом случае? – Zapp
@Zapp Да просто отформатируйте его как хотите даты, а затем вы можете сравнить их – Rizier123
@ Zapp обновил мой ответ сейчас. Прежде чем порядок вашего формата изменился, потому что он сравнил строку, так что теперь просто возьмите метку времени, и все должно хорошо работать – Rizier123