Задача
Необходимо отображать даты и значения времени в соответствии с настройками локали.
Решение
Это делается при помощи строки формата %c функции strftime():
print strftime('%c');
Можно также хранить строки формата функции strftime() как сообщения в каталоге сообщений:
$MC = new pc_MC_es_US;
print strftime($MC->msg('%Y-%m-%d'));
Обсуждение
Строка формата %c функции strftime() задает возвращаемое этой функцией представление даты и времени, предпочтительное для текущей локали. Ниже показан наиболее быстрый способ форматирования строки времени в соответствии с текущими настройками:
print strftime('%c');
Этот фрагмент кода генерирует множество результатов:
Tue Aug 13 18:37:11 2002 // для локали C по умолчанию
mar 13 ago 2002 18:37:11 EDT // для локали es_US
mar 13 aoы 2002 18:37:11 EDT // для локали fr_FR
Форматированная строка времени, полученная с помощью %c, хотя и соответствует локали, не очень гибкая. Например, если требуется только время, лучше передать другую строку формата функции strftime().
Хуже то, что и сами строки задания формата варьируются от локали к локали. В некоторых локалях значения часов отображаются в диапазоне от 1 до 12 с уточнением A.M./P.M., а в других они должны изменяться от 0 до 23. Чтобы строки времени выводились корректно именно для данной локали, включите нужные элементы в массив $messages для каждого формата времени. Ключ определенного формата времени, например %H:%M, для всех локалей будет одинаков. А вот значение может изменяться, например %H:%M для 24-часовых локалей или %I:%M %P для 12-часовых локалей. Затем найдите соответствующую строку формата и передайте ее функции strftime():$MC = new pc_MC_es_US;
print strftime($MC->msg('%H:%M'));
Смена локали не изменяет часовой пояс, она меняет только форматирование показываемого результата.