Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поведение функции date
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Поведение функции date

Страниц (1): [1]
 

1. Deonis - 21 Марта, 2014 - 13:07:39 - перейти к сообщению
Всем привет. Случайно заметил странную штучку. Раньше не обращал внимание, т.к. всегда использовал одну схему для форматирования даты date( /* шаблон */ , strtotime( /* строка */ ));
В чем собственно странность? Проще сразу показать пример:
PHP:
скопировать код в буфер обмена
  1. // Вычислим порядковый номер дня недели с использованием формата "w"
  2. echo date('w', strtotime('21-03-2014')); // 5
  3. // без функции strtotime
  4. echo date('w', '21-03-2014'); // 4
  5. // -- То же, но с форматом "N" (стандарт ISO-8601)
  6. echo date('N', strtotime('21-03-2014')); // 5
  7. // без функции strtotime
  8. echo date('N', '21-03-2014'); // 4

В чем прикол?
2. DlTA - 21 Марта, 2014 - 13:19:08 - перейти к сообщению
echo date('N', '21-03-2014'); => echo date('N', '21');
echo date('w', '21-03-2014'); => echo date('w', '21');
3. caballero - 21 Марта, 2014 - 13:23:10 - перейти к сообщению
strtotime('2014-03-21')
4. Deonis - 21 Марта, 2014 - 13:27:04 - перейти к сообщению
caballero пишет:
strtotime('2014-03-21')
От перестановки, в данном случае, результат не меняется:
PHP:
скопировать код в буфер обмена
  1. echo date('N', strtotime('2014-03-21')); // 5
  2. echo date('N', strtotime('21-03-2014')); // 5
  3. echo date('w', strtotime('2014-03-21')); // 5
  4. echo date('w', strtotime('21-03-2014')); // 5
  5. // Мало того
  6. echo date('w', mktime(0,0,0,3,21,2014)); // 5
  7. echo date('N', mktime(0,0,0,3,21,2014)); // все равно 5

На всякий случай, вот пример работы
5. DlTA - 21 Марта, 2014 - 13:30:13 - перейти к сообщению
Deonis пишет:
От перестановки, в данном случае, результат не меняется:
в предыдущих пыхах имело значение, или возможно зависело от временной зоны
по америкосски mm-dd-YYYY формат даты, но ща проверил и обрабатывает как dd-mm-YYYY
6. Мелкий - 21 Марта, 2014 - 13:31:15 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. echo date('N', '21'),PHP_EOL;
  2. echo date('N', 21),PHP_EOL;
  3. var_dump(intval('21-03-2014'));

Что вас удивляет-то? Второй аргумент число, об этом в мануале написано.
7. Deonis - 21 Марта, 2014 - 13:40:28 - перейти к сообщению
Мелкий пишет:
Второй аргумент число
C этим я успел разобраться (повторюсь, что не использовал ранее в качестве аргумента строку), но а как на счет второй части "марлезонского балета"?
8. Мелкий - 21 Марта, 2014 - 14:12:30 - перейти к сообщению
А в чём проблема со второй частью балета?
Пятница сегодня, всё правильно. У w и N индексы разные только в воскресенье.
9. Deonis - 21 Марта, 2014 - 14:15:48 - перейти к сообщению
Мелкий пишет:
У w и N индексы разные только в воскресенье.
Да да... Я уже понял. По непонятной причине, я ожидал разных результатов. Видать усталость сказывается ;)

 

Powered by ExBB FM 1.0 RC1