#php #locale #strftime
#php #язык #strftime
Вопрос:
Я использую strftime для получения сокращенной версии названия месяца. Желаемое поведение — получить 3 буквы (во французском языке в моем случае), Jan, Fev, Mar и т. Д.
Он отлично работает на моем Mac, но на тестовом сервере (Linux box) я получаю другую сокращенную версию, например janv., sept. (с точками) и так далее.
Как его можно изменить, чтобы получить 3 буквы?
Вот пример преобразования:
$sDateFin = sprintf(" Fin %s", strftime("%d %b %Y", $tDateFin));
Комментарии:
1. Вы пробовали
%h
вместо%b
, чтобы посмотреть, выдает ли он то же самое?2. Тестовый сервер, на котором он не работает должным образом, принадлежит клиенту, поэтому экспериментировать будет сложно. Я попробовал на своей рабочей станции, и с %h все в порядке. Документ PHP ( php.net//manual/en/function.strftime.php ) говорит, что %h — это псевдоним %b, так что я не думаю, что это что-то изменит…
3. Да, но я подумал, что на сервере может быть установлен какой-то другой псевдоним. В документации указано, что это зависит от локали , так что вы устанавливали какую-либо локаль раньше
setocale()
?4. В документации также говорится, что информация о локали поддерживается для каждого процесса, а не для каждого потока. Если вы используете PHP на многопоточном серверном API, таком как IIS или Apache в Windows, вы можете столкнуться с внезапными изменениями настроек локали во время выполнения скрипта, хотя сам скрипт никогда не вызывал setlocale() . Это происходит из-за того, что другие скрипты выполняются в разных потоках одного и того же процесса одновременно, изменяя языковой стандарт всего процесса с помощью setlocale() .
5. Так что это не совсем надежный способ получить форматированную строку. Полезно знать.