[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Баг php date_create_from_format()
AllesKlar
var_dump(date_create_from_format('m/y', '13/15'));

ТА-ДА!!!
object(DateTime)[2]
public 'date' => string '2016-01-19 21:14:44.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'UTC' (length=3)

на дворе январь 2016 :)

_____________
[продано копирайтерам]
Invis1ble
Цитата (AllesKlar @ 20.03.2015 - 00:25)
'm/y', '13/15'

Цитата (AllesKlar @ 20.03.2015 - 00:25)
2016-01

вполне вменяемый результат для 13-го месяца 15-го года, не вижу ничего странного и уж тем более бага

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

AllesKlar
Ну, в нашем Григорианском календаре, как бэ не существует 13-го месяца, и отдавая этому чуду дату в строке, хотелось бы получить именно эту дату или false, а не фантазии увлекающихся изотерикой разработчиков smile.gif

_____________
[продано копирайтерам]
Invis1ble
согласен, даже варнингов никаких
Цитата
$ php -r "var_dump(date_create_from_format('m/y', '13/15'), date_get_last_errors());"
class DateTime#1 (3) {
  public $date =>
  string(26) "2016-02-20 01:20:33.000000"
  public $timezone_type =>
  int(3)
  public $timezone =>
  string(11) "Europe/Kiev"
}
array(4) {
  'warning_count' =>
  int(0)
  'warnings' =>
  array(0) {
  }
  'error_count' =>
  int(0)
  'errors' =>
  array(0) {
  }
}

имхо, в идеале вообще эксепшн должен кидаться без танцев с бубном с дополнительными функциями

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

AllesKlar
Кто там в английском силен, запостите на баг-трекер php smile.gif

_____________
[продано копирайтерам]
inpost
А как по мне, так очень даже удобно, не надо использовать дополнительные функции для подсчёта нужного месяца, всё уже встроено в функцию.
Ты же, вроде, сам можешь контроллировать процесс и понимать какие данные ты вводишь, а нужно исключение, так и напиши раньше:
если месяц >12.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
AllesKlar
inpost
Нет, это уже все костыли.
Если я ловлю из формы строку, то хочу проверить, дата это или нет.
Естественно, я проверю и по-другому. Но WTF???
А для добавления интервала, есть метод add этого же самого класса DateTime

_____________
[продано копирайтерам]
stump
Особенность работы функции, но не баг.

_____________
Трус не играет в хокей
inpost
AllesKlar
Ты хочешь, чтобы код писался так:
сначала через DateTime менялось время, а потом уже выставлялось через данную функцию, то есть делать целых 2 действия, вместо одного, который сейчас сделан.

"Если я ловлю из формы строку, то хочу проверить, дата это или нет."
А может быть не дата? Если это не хакерюга, то он через форму заполнит и отправит реальную дату. Если это хакерюга, тебе ли не всё равно, что он введёт 13/19 и получит 01/20 ? Или ты так сильно заботишься о хакерочках и считаешь, что им надо отдельную табличку выводить "извините, хакерочек, вы ввели не те данные".
Ограничиваешь ввод ты через форму и JS, если в ПХП пришли не те данные, значит либо баг в JS, либо кто-то умышленно хочет поломать. Какой смысл ради таких стараться?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
AllesKlar
inpost
Я вот вообще не понимаю, о чем тут спор.
Какой хакерюга?
Валидация данных кредитной карты.
Дата окончания действия карты имеет формат 'MM/YY'
И если человек просто перепутал и сначала ввел год, а потом месяц, я должен эту ситуацию отловить.

В документации четко сказано:
Цитата
Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату


.... короче.... я понимаю, php... нестрогое типизирование, удобно дату хранить в стрингах, и складыывать 12 + зеленый.

Но ДАТА, она должна быть ДАТА. И если нет 13 месяца, значит 2 варианта, либо false, либо exception

Всё остальное это ГО-ВНО-КОД


_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.