strtotime () выдает false при форматированной дате - PullRequest
2 голосов
/ 21 апреля 2011

У меня проблема с преобразованием форматированной строки даты в целочисленную метку времени.Я использую DatePicker для ввода поля, такого как DD/MM/YY, и я использую strtotime, чтобы изменить его.

Пример использования

$date_from = (!empty($_POST['datefrom'])) ? (string) $db->sql_escape($_POST['datefrom']) : false;
$date_to   = (!empty($_POST['dateto'])) ? (string) $db->sql_escape($_POST['dateto']) : false;

$time_from = (!empty($_POST['timefrom'])) ? (string) $db->sql_escape($_POST['timefrom']) : '';
$time_to   = (!empty($_POST['timeto'])) ? (string) $db->sql_escape($_POST['timeto']) : '';

Дампы

var_dump($_POST); 
var_dump($date_from . ' ' . $time_from);
var_dump($date_to . ' ' . $time_to);

Выходы

array(4) {
  ["datefrom"]=>
  string(10) "23/03/2011"
  ["dateto"]=>
  string(10) "18/04/2011"
  ["timefrom"]=>
  string(5) "01:26"
  ["timeto"]=>
  string(5) "04:44"
}
string(16) "23/03/2011 01:26"
string(16) "18/04/2011 04:44"

Теперь вы видите, что каждая переменная не пуста, теперь ничего не возвращается (кроме false) при использовании strtotime с этим:

$range_from = strtotime($date_from . ' ' . $time_from);
$range_to   = strtotime($date_to . ' ' . $time_to);

var_dump($range_from);
var_dump($range_to);

Выходы

bool(false)
bool(false)

Вот где я застрял, думая, почему он не конвертирует DD/MM/YY HH:MM В метку времени, я вряд ли могу найти, что с ней не так ...

1 Ответ

4 голосов
/ 21 апреля 2011

См. http://php.net/strtotime

Даты в форматах m / d / y или dmy устраняются неоднозначно, если посмотреть на разделитель между различными компонентами: если разделитель является косой чертой (/), тоамериканский м / д / у предполагается;тогда как если в качестве разделителя используется тире (-) или точка (.), то предполагается, что используется европейский формат dmy.

23/03/2011 в м / д / у недопустимо, поэтомуфункция возвращает false.

...