strftime: короткое имя месяца не всегда одно и то же

#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. Так что это не совсем надежный способ получить форматированную строку. Полезно знать.