Олег Бугров: тогда есть подозрение, что никак. Вот что нашел на SO:
That's not possible with Docker. Docker uses the same clock as the outside kernel. What you need is full virtualization which emulates a complete PC.
The sudo fails because it only makes you root of the virtual environment inside of the container. This user is not related to the real root of the host system (except by name and UID) and it can't do what the real root could do.
In you use a high level language like Python or Java, you often have hooks where you can simulate a certain system time for tests or you can write code which wraps "get current time from system" and returns what your test requires.
Другими словами, дата все-таки не устанавливается потому, что нет root-прав - если верить цитате выше, то в реальности пользователь root в контейнере - фикция. Соответственно если и можно что-либо делать с датой, то только меняя временную зону, что является допустимым с точки зрения логики, которая приводится выше.
Так что судя по всему, ваш путь - это либо хаки в той среде, которую вы хотите проверить с измененной датой, либо использование полноценной виртуализации.
Если считаете, что это ответ на ваш вопрос, могу вынести этот текст в тело ответа, родившего эту ветку.
Arik: нет-нет, по условию задачи функция должна быть в любом случае вызвана, просто в случае false внутри функции будет например создан объект/массив, а не обновлен.
1. Вы слишком неоптимально используете данный оператор, гораздо короче можно написать так:
f($x ? $x : $y);
или так:
f($x ?: $y);
2. В посте заранее оговорено, что этот вариант известен и не интересует.
Олег Бугров: Возможно, что и не в правах дело, но в общем-то обычно такое сообщение видно тому, кто пробует изменить дату не из под пользователя с root-правами. В любом случае, я бы сначала попробовал все-таки на тестовом контейнере установить su/sudo и проверить мою догадку. Тогда будет по крайней мере понятно, что делать дальше.
Плюс, можно попробовать другое решение - если вам необходимо устанавливать время не для теста каких-то моментов в будущем или прошлом, а просто для верной даты и времени с учетом часового пояса, то это решается установкой NTP и его настройкой. Подробно можно прочитать о таком тут: https://www.ivankrizsan.se/2015/10/31/time-in-dock...
Спасибо за ответ, предыдущие два оратора не справились даже с прочтением задачи, в итоге удалив свои ответы. Да, действительно, этот вариант подходит, если бы не одно "но" - я в тексте вопроса отдельно оговорил, что краткая форма "if else" известна и не рассматривается.
В общем-то, вопрос на самом деле праздный и больше исследовательский, ради познания. Если хотите, могу отметить ваш комментарий как верное решение :)