всем привет. вопрос касается тоже выборки по дате, но не дня рождения, а даты регистрации. за определенное число выбирает нормально, но за промежуток времени в рамках одного дня - не выбирает. и меня мучает вопрос - выбрать людей, которые зарегистрировались в промежуток, к примеру, 16.02.2020 16:40:00 и до 08.02.2020 17:00:00 - в принципе не возможно, или я что то не так делаю. потому как поле даты регистрации хранит не только день, но еще и время.
falcon_fraer написал: Добрый день!!! Знаю что тема 100500 лет как устарела но всеже! : как прописать фильтр чтоб выборка производилать за месяц?? тоисть не по определенной дате, а например, с 01.08 по 31.08 ???
Мало ли кто ищет решение. Предлагаю такой хак, заводите у пользователя до поле UF_BIRTHDAY. Далее ставим обработчик на изменение PERSONAL_BIRTHDAY:
use Bitrix\Main\EventManager;
$eventManager = EventManager::getInstance();
$eventManager->addEventHandlerCompatible(
'main',
'OnBeforeUserUpdate',
['MyClassUserUpdate', 'OnBeforeUserUpdateHandler']
);
class MyClassUserUpdate
{
function OnBeforeUserUpdateHandler(&$arFields)
{
if(is_set($arFields, "PERSONAL_BIRTHDAY")) {
$date = new DateTime($arFields["PERSONAL_BIRTHDAY"]);
$ufBirthday = $date->format('d.m.1970'); //Формат
$arFields['UF_BIRTHDAY'] = $ufBirthday;
}
}
}
И просто заносим в поле UF_BIRTHDAY дату с заданным годом, например 1970. То есть в поле UF_BRITHDAY будут все даты с одним годом. Готово, далее берём например код Игоря Долгополова, из комментария выше и получаем такую конструкцию:
Код
use \Bitrix\Main\UserTable as UTable;
use \Bitrix\Main\Type\DateTime as Dtime;
$rsUsers = UTable::getList(
[
"select" => ["ID", "PERSONAL_BIRTHDAY", "UF_BIRTHDAY"],
"filter" => [
"><UF_BIRTHDAY" => [
new DTime("24.09.1970","d.m.Y"),
new DTime("30.09.1970","d.m.Y")
]
]
]
);
while ($arUser = $rsUsers->fetch()) {
var_dump($arUser);
}