Тут всё просто:
$user_id = 2;
$arGroups_db = CUser::GetUserGroupList( $user_id );
$aimGroupId = 4; //id группы, куда добавляем
$aimGroupLastDate = '09.05.2018 23:59:59'; // дата, которая нужна, если из какой-то переменной в timestamp, то используйте ConvertTimeStamp($var, "FULL"), она приведёт формат к текущему формату базы битрикса
$aimGroupUpdated = false;
while ($arGroup = $arGroups_db->Fetch()){
if ($arGroup['GROUP_ID'] == $aimGroupId) {
$arGroup['DATE_ACTIVE_TO'] = $aimGroupLastDate;
$aimGroupUpdated = true;
}
$arGroups[] = $arGroup;
}
if (!$aimGroupUpdated) {
$arGroups[] = [
'GROUP_ID' => $aimGroupId,
'DATE_ACTIVE_FROM' => ConvertTimeStamp(time(), "FULL"),
'DATE_ACTIVE_TO' => $aimGroupLastDate
];
}
CUser::SetUserGroup($user_id, $arGroups);