В этом прелесть этого формата: он красиво заказывает. Конечно, это может быть менее эффективным, в зависимости от ваших конкретных обстоятельств, но это также может быть намного более удобным и привести к более поддерживаемому коду - нам нужно знать больше, чтобы действительно сделать это суждение суждением.
Для правильного часового пояса вы можете использовать, например,
date_default_timezone_set('America/New_York');
Нажмите здесь, чтобы посмотреть доступные часовые пояса PHP.
@anushr, если часовой пояс необходим для сравнения, разницу времени можно добавить к дате перед сравнением. Это все еще быстрее, чем пытаться преобразовать две строки даты и времени в mm/dd/yyyyформат в дату и затем сравнить их. Меня всегда беспокоит, когда у разработчиков есть даты в нескольких часовых поясах в их системе. Я думаю, что лучше хранить даты в вашей системе, всегда в одном часовом поясе, а затем отображать их в любом необходимом часовом поясе. Я начал использовать yyyy-mm-ddформат (или yyyymmdd) в 1998 году, когда понял, что он сортируется намного быстрее, даже на SQL-сервере.
AaA
59
Ну вот:
function isToday($time)// midnight second{return(strtotime($time)=== strtotime('today'));}
isToday('2010-01-22 00:00:00.0');// true
Кроме того, еще несколько вспомогательных функций:
function isPast($time){return(strtotime($time)< time());}function isFuture($time){return(strtotime($time)> time());}
Почему странная отсталая логика и посторонние логические выражения? Почему бы просто не "вернуть strtotime ($ time) == strtotime ('сегодня')", "вернуть strtotime ($ time)> time ()" и "вернуть strtotime ($ time) <time ()"?
Бобби Джек
@ Бобби Джек: у меня было больше функций в этих функциях, я забыл удалить лишний код. Исправлено сейчас.
Аликс Аксель
+1 на вспомогательную функцию, в частности isPast b / c Я только что запустил if(strtotime('2013-01-22 00:00:00.00') < time()){....}и это сделал для меня.
MDMoore313
47
Для завершения BoBby Jack, используйте DateTime OBject, если у вас php 5.2.2+:
if(newDateTime()>newDateTime($var)){// $var is before today so use it}
Это не правильно. Если $ var - текущий день (после точной полуночи), новый DateTime () будет больше, чем новый DateTime ($ var), и это не так, $ var до сегодняшнего дня.
$toBeComparedDate ='2014-08-12';
$today =(newDateTime())->format('Y-m-d');//use format whatever you are using
$expiry =(newDateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today)> strtotime($expiry));//false or true
И вам нужен PHP> = 5.4 для (new DateTime ()) -> format ('Ym-d');
webrama.pl
6
Одно предупреждение, основанное на моем опыте, если ваша цель включает только дату, то будьте осторожны, чтобы включить метку времени . Например, скажем, сегодня "2016-11-09". Сравнение, включающее метку времени, аннулирует здесь логику. Пример,
// input
$var ="2016-11-09 00:00:00.0";// check if date is today or in the futureif( time()<= strtotime($var)){// This seems right, but if it's ONLY date you are after// then the code might treat $var as past depending on// the time.}
Код выше кажется правильным, но если это ТОЛЬКО дата, которую вы хотите сравнить, то приведенный выше код не является правильной логикой. Зачем? Потому что time () и strtotime () будут содержать метку времени. То есть, хотя обе даты приходятся на один и тот же день, разница во времени будет иметь значение. Рассмотрим пример ниже:
// plain date string
$input ="2016-11-09";
Поскольку ввод является строкой с простой датой, использование strtotime()on $inputпредполагает, что это полночь 2016-11-09. Таким образом, бег в time()любое время после полуночи всегда будет лечить$input прошлым, даже если они в один и тот же день.
Чтобы это исправить, вы можете просто написать код, например так:
if(date("Y-m-d")<= $input){
echo "Input date is equal to or greater than today.";}
Я уверен, что ОП рассмотрел это, и поэтому они включили в свой вопрос «00: 00: 00.0»
AaA
6
Несколько лет спустя я повторяю наблюдение Бобби Джека, что последние 24 часа не сегодня !!! И я удивлен, что за ответ было столько голосов ...
Для сравнения, если определенная дата меньше, равна или больше другой, сначала вам нужно повернуть их «вниз» к началу дня. Другими словами, убедитесь, что вы говорите об одном и том же времени 00:00:00 в обеих датах. Это может быть просто и элегантно сделано как:
strtotime("today")<=> strtotime($var)
if $varимеет часть времени в 00:00:00, как указано в OP.
замещать <=> все, что вам нужно (или оставьте это в php 7)
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);//now compare the two datesif($intDiff >0){echo '$date1 is in the past';}else{echo 'date1 is today or in the future';}
Надеюсь, это поможет. Мой первый пост на stackoverflow!
Ответы:
Превращает это в значение времени
Дает вам секунды с
$var
Проверим, если
$var
был в течение последнего дня.источник
Этот формат идеально подходит для стандартного сравнения строк, например
Чтобы получить текущую дату в этом формате, просто используйте:
date("Y-m-d H:i:s")
.Так:
В этом прелесть этого формата: он красиво заказывает. Конечно, это может быть менее эффективным, в зависимости от ваших конкретных обстоятельств, но это также может быть намного более удобным и привести к более поддерживаемому коду - нам нужно знать больше, чтобы действительно сделать это суждение суждением.
Для правильного часового пояса вы можете использовать, например,
Нажмите здесь, чтобы посмотреть доступные часовые пояса PHP.
источник
mm/dd/yyyy
формат в дату и затем сравнить их. Меня всегда беспокоит, когда у разработчиков есть даты в нескольких часовых поясах в их системе. Я думаю, что лучше хранить даты в вашей системе, всегда в одном часовом поясе, а затем отображать их в любом необходимом часовом поясе. Я начал использоватьyyyy-mm-dd
формат (илиyyyymmdd
) в 1998 году, когда понял, что он сортируется намного быстрее, даже на SQL-сервере.Ну вот:
Кроме того, еще несколько вспомогательных функций:
источник
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
и это сделал для меня.Для завершения BoBby Jack, используйте DateTime OBject, если у вас php 5.2.2+:
источник
Вы можете использовать
DateTime
класс:Операторы сравнения работают *:
Также возможно получить значения меток времени из объектов DateTime и сравнить их:
* Обратите внимание, что
===
возвращает false при сравнении двух разных объектов DateTime, даже если они представляют одну и ту же дату.источник
$future
стало прошлым. : Pисточник
$var
равные тоже в OPОдно предупреждение, основанное на моем опыте, если ваша цель включает только дату, то будьте осторожны, чтобы включить метку времени . Например, скажем, сегодня
"2016-11-09"
. Сравнение, включающее метку времени, аннулирует здесь логику. Пример,Код выше кажется правильным, но если это ТОЛЬКО дата, которую вы хотите сравнить, то приведенный выше код не является правильной логикой. Зачем? Потому что time () и strtotime () будут содержать метку времени. То есть, хотя обе даты приходятся на один и тот же день, разница во времени будет иметь значение. Рассмотрим пример ниже:
Поскольку ввод является строкой с простой датой, использование
strtotime()
on$input
предполагает, что это полночь 2016-11-09. Таким образом, бег вtime()
любое время после полуночи всегда будет лечить$input
прошлым, даже если они в один и тот же день.Чтобы это исправить, вы можете просто написать код, например так:
источник
Несколько лет спустя я повторяю наблюдение Бобби Джека, что последние 24 часа не сегодня !!! И я удивлен, что за ответ было столько голосов ...
Для сравнения, если определенная дата меньше, равна или больше другой, сначала вам нужно повернуть их «вниз» к началу дня. Другими словами, убедитесь, что вы говорите об одном и том же времени 00:00:00 в обеих датах. Это может быть просто и элегантно сделано как:
if
$var
имеет часть времени в 00:00:00, как указано в OP.замещать
<=>
все, что вам нужно (или оставьте это в php 7)Кроме того, очевидно, что мы говорим об одном и том же часовом поясе для обоих. Для списка поддерживаемых часовых поясов
источник
(пример w3schools, он отлично работает)
источник
Расширяя ответ Джосуа от w3schools:
Надеюсь, это поможет. Мой первый пост на stackoverflow!
источник
Сравните объекты даты и времени:
(Я выбрал 10 дней - все, что старше 10 дней, это «СТАРЫЙ», иначе «НОВЫЙ»)
источник
Некоторые из приведенных ответов не учитывают текущий день!
Вот мое предложение.
источник
Если вы делаете вещи со временем и датами Carbon - ваш лучший друг;
Установите пакет тогда:
lt = меньше чем, gt = больше чем
Как в вопросе:
и многое другое;
источник