Неверно выводит Дату рождения

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Неверно выводит Дату рождения

#1 18 июня 2013 в 15:36
В настройках профиля указываю дату рождения 15 сентября сохраняю, выводит в профиле 14 сентября.Такое было ещо в движке 1.9 и такое осталось в 1.10.1 и это на только в одном месяце и дате а я так понимаю в нескольких так как сегодня получил от пользователя письмо с описаниям такой же проблемы.Подскажите пожалуйста как поправить?
#2 18 июня 2013 в 20:19
Поздравляю. Вы нашли баг.
Могу ошибиться, но пока вижу только одну причину такого поведения движка. Дело в том, что дата дня рождения форматируется методом ядра движка dateFormat(). Это можно увидеть в файле модели компонента users, строка 362:
  1. $user['fbirthdate'] = cmsCore::dateFormat($user['birthdate']);
А в методе dateFormat() в файле /core/cms.php в строке 2730 — 2731 видим:
  1. // формируем входную $date с учетом смещения
  2. $date = date('Y-m-d H:i:s', strtotime($date)+($inConf->timediff*3600));
Это означает, что дата дня рождения форматируется со смещением, установленным в админке, в настройках сайта, во вкладке Время. Конечно же, день рождения должен формироваться без смещения. Судя по всему, у вас стоит отрицательное смещение(15 выводится как 14-е).
Как исправить?
1 вариант: Уберите смещение времени в админке;
2 вариант: Вводим новый параметр в метод, указывающий, форматировать дату без смещения.
Для этого в файле /core/cms.php заменяем строку 2724
  1. static function dateFormat($date, $is_full_m = true, $is_time=false, $is_now_time = true){
на
  1. static function dateFormat($date, $is_full_m = true, $is_time=false, $is_now_time = true, $is_diff = true){
В этом же файле, строку 2731
  1. $date = date('Y-m-d H:i:s', strtotime($date)+($inConf->timediff*3600));
заменяем на
  1.  
  2. if($is_diff){
  3. $date = date('Y-m-d H:i:s', strtotime($date)+($inConf->timediff*3600));
  4. }else{
  5. $date = date('Y-m-d H:i:s', strtotime($date));
  6. }
  7.  
В файле модели /components/users/model.php находим строку 362
  1. $user['fbirthdate'] = cmsCore::dateFormat($user['birthdate']);
и меняем на:
  1. $user['fbirthdate'] = cmsCore::dateFormat($user['birthdate'], true, false, true, false);
Вроде всё. Если не сложно, можете написать в багтрекер.
#3 18 июня 2013 в 21:00

. Если не сложно, можете написать в багтрекер.

Марат
Я им никогда не пользовался, ещо не туда напишу, лучше уж вы если не сложно.
#4 18 июня 2013 в 21:08
Спасибо огромное, внес изменения в файлы и все заработало как надо.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.