Добрый день! В сущности есть поле дата рождения тип дата с календарем. Если ставить фильтр дата рождения до 31.12.1969 от любой даты меньше , то к выдаче ничего нет, хотя на самом деле очень много записей. Причем столкнулась с этим в двух разных системах и на разных серверах. Фильтры по дате рождения начиная с 1970г и выше работают вроде нормально.
В одной из систем в поле возраст стоит формула определения возраста по дате рождения
if([203]>'01/01/1917' and [TODAY]>[203],([TODAY]-[203])/31536000,'дата рожд. не корректна')
где 203- id дата рождения
Если дата рождения 1960 г и ниже, то в поле возраст пишет 'дата рожд. не корректна' - хотя это не верно.
Если ставлю фильтр про который писала выше, то не показывает записи, где дата рождения =<1960г, хотя они есть
Если дата рождения >=1970г- то и формула и фильтр отрабатывают корректно.
Помогите, пожалуйста, разобраться
Фильтр по дате
- support
- Техническая поддержка
- Сообщения: 9034
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Фильтр по дате
К сожалению это исправить не возможно:(
При разработке кода я все даты сохраняю в секундах, так удобнее проводить операции с датами.
Но в таком варианте даты работают от 1 января 1970 00:00:00 GMT
http://us1.php.net/manual/ru/function.time.php
Я подумаю над этой проблемой, возможно создам дополнительный тип поля "Дата рождения"
При разработке кода я все даты сохраняю в секундах, так удобнее проводить операции с датами.
Но в таком варианте даты работают от 1 января 1970 00:00:00 GMT
http://us1.php.net/manual/ru/function.time.php
Я подумаю над этой проблемой, возможно создам дополнительный тип поля "Дата рождения"
- support
- Техническая поддержка
- Сообщения: 9034
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Фильтр по дате
Решение найдено. Вводить дополнительное поле не потребуется. Исправление будет в 1.9.
Чтобы исправить фильтры сейчас, откройте фал includes\classes\reports\reports.php
и найдите строчки 410-418
Замените их на следующих код:
И фильтры должны заработать коректно с датой ниже 1970
Для того, чтобы подсчитать возраст, вам следует использовать mysql функцию "year". Пример формулы для расчета возраста:
где [203] - дата рождения
Чтобы исправить фильтры сейчас, откройте фал includes\classes\reports\reports.php
и найдите строчки 410-418
Код: Выделить всё
if(strlen($values[1])>0)
{
$sql[] = "FROM_UNIXTIME(" . $field_name . ",'%Y-%m-%d')>='" . db_input($values[1]) . "'";
}
if(strlen($values[2])>0)
{
$sql[] = "FROM_UNIXTIME(" . $field_name . ",'%Y-%m-%d')<='" . db_input($values[2]) . "'";
}
Код: Выделить всё
if(strlen($values[1])>0)
{
if(strtotime($values[1])<0)
{
$sql[] = "DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0),INTERVAL " . $field_name . " SECOND),'%Y-%m-%d')>='" . db_input($values[1]) . "'";
}
else
{
$sql[] = "FROM_UNIXTIME(" . $field_name . ",'%Y-%m-%d')>='" . db_input($values[1]) . "'";
}
}
if(strlen($values[2])>0)
{
if(strtotime($values[2])<0)
{
$sql[] = "DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0),INTERVAL " . $field_name . " SECOND),'%Y-%m-%d')<='" . db_input($values[2]) . "'";
}
else
{
$sql[] = "FROM_UNIXTIME(" . $field_name . ",'%Y-%m-%d')<='" . db_input($values[2]) . "'";
}
}
Для того, чтобы подсчитать возраст, вам следует использовать mysql функцию "year". Пример формулы для расчета возраста:
Код: Выделить всё
year(now())- year(DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(0),INTERVAL [203] SECOND),'%Y-%m-%d'))
Re: Фильтр по дате
Спасибо большое, теперь заработало.
Re: Фильтр по дате
И за формулу спасибо отдельно