PHP: strtotime retorna “nada” do tipo “booleano”

Eu tenho a variável $EDate , usei a function strtotime com esta variável com valores diferentes e o resultado foi o seguinte:

 $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 

Alguém pode explicar isso e como evitar o resultado booleano?

Da documentação :

As datas nos formatos m / d / y ou dmy são desambiguadas ao olhar para o separador entre os vários componentes: se o separador for uma barra (/), então o americano m / d / y é assumido; enquanto que se o separador é um dash (-) ou um ponto (.), então o formato dmy europeu é assumido.

Seu código assume que a data está no formato dmy e retornará FALSE uma vez que os valores do mês estão incorretos:

 var_dump(strtotime('10-21-2013')); // no month 21 var_dump(strtotime('09-30-2013')); var_dump(strtotime('09-30-2013')); 

Se você quiser usar formatos personalizados, use DateTime::createFromFormat() vez disso:

 $date = DateTime::createFromFormat('md-Y', '10-21-2013'); echo $date->format('U'); 

Demo!

Editar: Esta resposta não se aplica mais à pergunta, veja meu comentário abaixo.

Coloque seus valores entre aspas, então eles se tornam uma string:

 $EDate = '10-21-2013'; ... 

Seu código atual faz uma subtração matemática: 10 – 12 – 2013 = -2015.