У меня есть переменная $EDate
, я использовал функцию strtotime с этой переменной с разными значениями, и результат был следующим:
$EDate = 10-21-2013; echo "strtotime($EDate)"; the result = nothing and the type is boolean $EDate = 09-02-2013; echo "strtotime($EDate)"; the result = 1360386000 and the type is integer $EDate = 09-30-2013; echo "strtotime($EDate)"; the result = nothing and the type is boolean $EDate = 09-30-2013; echo "strtotime($EDate)"; the result = nothing and the type is boolean $EDate = 07-02-2014; echo "strtotime($EDate)"; the result = 1391749200 and the type is integer $EDate = 10-12-2014; echo "strtotime($EDate)"; the result = 1418187600 and the type is integer
Может ли кто-нибудь объяснить это и как избежать логического результата?
Из документации :
Даты в форматах m / d / y или dmy устраняются неоднозначно, глядя на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что американский m / d / y; тогда как если разделитель является тире (-) или точкой (.), тогда предполагается европейский формат dmy.
Ваш код предполагает, что дата находится в формате dmy
и вернет FALSE
поскольку значения месяца неверны:
var_dump(strtotime('10-21-2013')); // no month 21 var_dump(strtotime('09-30-2013')); var_dump(strtotime('09-30-2013'));
Если вы хотите использовать пользовательские форматы, вместо этого используйте DateTime::createFromFormat()
:
$date = DateTime::createFromFormat('md-Y', '10-21-2013'); echo $date->format('U');
Демо!
Изменить: этот ответ больше не применяется к вопросу, см. Мой комментарий ниже.
Поместите свои значения в кавычки, чтобы они стали строкой:
$EDate = '10-21-2013'; ...
Ваш текущий код выполняет математическое вычитание: 10 – 12 – 2013 = -2015.