Неверно выводит Дату рождения
ЕСТЬ РЕШЕНИЕ
ЗАКРЫТО
Неверно выводит Дату рождения
#1
18 июня 2013 в 15:36
В настройках профиля указываю дату рождения 15 сентября сохраняю, выводит в профиле 14 сентября.Такое было ещо в движке 1.9 и такое осталось в 1.10.1 и это на только в одном месяце и дате а я так понимаю в нескольких так как сегодня получил от пользователя письмо с описаниям такой же проблемы.Подскажите пожалуйста как поправить?
#2
18 июня 2013 в 20:19
Поздравляю. Вы нашли баг.
Могу ошибиться, но пока вижу только одну причину такого поведения движка. Дело в том, что дата дня рождения форматируется методом ядра движка dateFormat(). Это можно увидеть в файле модели компонента users, строка 362:
А в методе dateFormat() в файле /core/cms.php в строке 2730 — 2731 видим:
Это означает, что дата дня рождения форматируется со смещением, установленным в админке, в настройках сайта, во вкладке Время. Конечно же, день рождения должен формироваться без смещения. Судя по всему, у вас стоит отрицательное смещение(15 выводится как 14-е).
Как исправить?
1 вариант: Уберите смещение времени в админке;
2 вариант: Вводим новый параметр в метод, указывающий, форматировать дату без смещения.
Для этого в файле /core/cms.php заменяем строку 2724
на
В этом же файле, строку 2731
заменяем на
В файле модели /components/users/model.php находим строку 362
и меняем на:
Вроде всё. Если не сложно, можете написать в багтрекер.
Могу ошибиться, но пока вижу только одну причину такого поведения движка. Дело в том, что дата дня рождения форматируется методом ядра движка dateFormat(). Это можно увидеть в файле модели компонента users, строка 362:
$user['fbirthdate'] = cmsCore::dateFormat($user['birthdate']);
// формируем входную $date с учетом смещения
Как исправить?
1 вариант: Уберите смещение времени в админке;
2 вариант: Вводим новый параметр в метод, указывающий, форматировать дату без смещения.
Для этого в файле /core/cms.php заменяем строку 2724
static function dateFormat($date, $is_full_m = true, $is_time=false, $is_now_time = true){
static function dateFormat($date, $is_full_m = true, $is_time=false, $is_now_time = true, $is_diff = true){
заменяем на
if($is_diff){ }else{ }
$user['fbirthdate'] = cmsCore::dateFormat($user['birthdate']);
$user['fbirthdate'] = cmsCore::dateFormat($user['birthdate'], true, false, true, false);
#3
18 июня 2013 в 21:00
Я им никогда не пользовался, ещо не туда напишу, лучше уж вы если не сложно.. Если не сложно, можете написать в багтрекер.
Сегодня в 16:45
#4
18 июня 2013 в 21:08
Спасибо огромное, внес изменения в файлы и все заработало как надо.