"PHP" / Говнокод #14350 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
static function anyToTimestamp($date) {
		// 2009-09-03 12:10:55
		if (preg_match('/^([0-9]{4})\-([0-9]{2})\-([0-9]{2})(?: ([0-9]{2})\:([0-9]{2})\:([0-9]{2}))?$/', $date, $arr)) {
			$ts = mktime($arr[4], $arr[5], $arr[6], $arr[2], $arr[3], $arr[1]);
		// 03.04.2008 10:12:11
		} elseif (preg_match('/^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})(?: ([0-9]{1,2})\:([0-9]{1,2})(?:\:([0-9]{2}))?)?$/', $date, $arr)) {
			$ts = mktime($arr[4], $arr[5], $arr[6], $arr[2], $arr[1], $arr[3]);
			// MySQL timestamp YYYYMMDDHHMISS
		} elseif (preg_match('/^\d{14}$/', $date)) {
			$ts = mktime(substr($string, 8, 2), substr($string, 10, 2), substr($string, 12, 2), substr($string, 4, 2), substr($string, 6, 2),
				substr($string, 0, 4));
			// PHP timestamp
		} elseif (is_int($date)) {
			$ts = $date;
			// давно заметил, что предыдущее условие не всегда срабатывает. добавил условие ниже. если передается timestamp 100% сработает
		}elseif(strlen((int)$date)>=10 && is_int((int)$date)) {
			$ts = $date;
		}

		return ($ts && $ts!=-1)?$ts:null;
	}

Копаюсь как обычно в проекте, а этот довольно большой на протяжении нескольких лет над ним трудились разные программисты.
Причем бывает читаю смешные комментарии.

Однако весь смысл не в этом как вы уже поняли.

Запостил: oooZinka oooZinka, (Updated )

Комментарии (4) RSS

  • Я правильно понимаю что is_int((int)$date) всегда истинно и потому мы просто принимаем все длинные строчки?
    Ответить
    • Мне конструкция strlen((int)$date) взрывает мозг. Что оно вообще делает?
      Ответить
      • Капитан не-лень сообщает, что таки вернёт количество десятичных цифр в числе $date.
        Ход рассуждения.
        1) $date приводится к int по php-правилам (например, "123456shit" = 123456, "shit123456" = 0).
        2) Поскольку strlen принимает не абы что, а строку, число неявно преобразуется в строку.
        3) В строке, полученной из числа, будет столько символов, сколько десятичных цифр содержится в числе после его преобразования.

        А вот в $ts = $date; они к числу преобразование не делают, что может привести к непредсказуемым последствиям.
        Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8