Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: date vs strftime
 
 автор: Diablo_   (04.08.2009 в 20:41)   письмо автору
 
 

Для получения даты, из формата time() всегда пользовался функцией date("d.m.Y", time())
Понадобилось писать месяц словом, по-русски!
Но в одной из тем на фоурме, нашёл скрипт:
setlocale(LC_TIME, 'Russian_Russia.1251');
echo strftime('%d %Bа %Y', $time);
Вопрос на засыпку, почему так редко встречаю использование данной функции? Есть какие то ограничения? В чём подвох? Работает медленее?

  Ответить  
 
 автор: Trianon   (04.08.2009 в 21:35)   письмо автору
 
   для: Diablo_   (04.08.2009 в 20:41)
 

%Bа - это как?

  Ответить  
 
 автор: Diablo_   (04.08.2009 в 22:01)   письмо автору
 
   для: Trianon   (04.08.2009 в 21:35)
 

ну выводится то "Август" "Сентябрь" это я для Августа буковку "а" подставил)))

  Ответить  
 
 автор: Тень&   (08.02.2010 в 23:13)   письмо автору
 
   для: Diablo_   (04.08.2009 в 22:01)
 

А не проще сразу подставлять "Августа"? У тебя и так, и так зависимость от текущего месяца (для Сентября уже подставить буковку не выйдет). Лучше, IMHO, писать обёртку вокруг strftime().

  Ответить  
 
 автор: ......   (04.08.2009 в 21:40)
 
   для: Diablo_   (04.08.2009 в 20:41)
 

не везде работает,
и строка 'Russian_Russia.1251' может иметь например такой "ru_RU.1251" формат на некоторых системах

  Ответить  
 
 автор: magic   (08.02.2010 в 19:39)   письмо автору
 
   для: ......   (04.08.2009 в 21:40)
 

Вот нашел тему через поиск, но у меня другая проблема. Название месяца выводится локально на компе все нормально, а вот на хостинге крякозябрами. Как поставить нормальную кодировку.

<?php
setlocale
(LC_TIME"russian");
print  
strftime("%B");
?>

Заранее спасибо

  Ответить  
 
 автор: Саня   (08.02.2010 в 22:21)   письмо автору
 
   для: magic   (08.02.2010 в 19:39)
 

Уточните у хостера название русской локали.

  Ответить  
 
 автор: Саня   (08.02.2010 в 22:32)   письмо автору
 
   для: Diablo_   (04.08.2009 в 20:41)
 

Подвох в том, что нельзя однозначно настроить локаль так, чтобы она работала везде одинаково.

  Ответить  
 
 автор: magic   (08.02.2010 в 23:38)   письмо автору
 
   для: Саня   (08.02.2010 в 22:32)
 

А как тогда быть, кроме как спросить у хостера? Может проверить хостера с помощью какой-то функции и подстроиться под них? Может можно увидеть через phpinfo

  Ответить  
 
 автор: Саня   (09.02.2010 в 00:36)   письмо автору
 
   для: magic   (08.02.2010 в 23:38)
 

<?
system
('locale -a | grep ru'); // так
system('ls /usr/share/locale | grep ru'); // или так
Я почти уверен, что system() и её аналоги запрещены на вашем хостинге.

  Ответить  
 
 автор: magic   (09.02.2010 в 01:15)   письмо автору
 
   для: Саня   (09.02.2010 в 00:36)
 

Да, действительно отключены для безопасности. Что делать, как быть? Может еще что-то есть. Как-то решается эта проблемка?

  Ответить  
 
 автор: Саня   (09.02.2010 в 07:01)   письмо автору
 
   для: magic   (09.02.2010 в 01:15)
 

Вы боитесь общаться с хостингом?

  Ответить  
 
 автор: magic   (09.02.2010 в 09:11)   письмо автору
 
   для: Саня   (09.02.2010 в 07:01)
 

Да нет в принцепе. Надо узнать какую они используют кодировку? Я правильно понял. Так это относится ко всему сайту? Для 100% уверенности, что не вылезут крякозябры, наверно надо на всех страницах использовать их кодировку?

  Ответить  
 
 автор: Саня   (09.02.2010 в 09:32)   письмо автору
 
   для: magic   (09.02.2010 в 09:11)
 

Кодировка и локаль — разные вещи, но они не навязываются хостингом. Вы вольны использовать любую существующую кодировку. Она не зависит от операционной системы и её настроек, на которой крутится сайт. Так же вы можете использовать любую существующую локаль. Главное чтобы она была установлена на сервере и знать как называется.

Попробуйте этот код:
<?
setlocale
(LC_ALL, array('ru_RU.CP1251''rus_RUS.1251'));

  Ответить  
 
 автор: Саня   (09.02.2010 в 09:46)   письмо автору
 
   для: Саня   (09.02.2010 в 09:32)
 

> Главное чтобы она была установлена на сервере и знать как называется.
Впрочем, даже это не обязательно. Существуют реализации механизма локалей на чистом PHP.

  Ответить  
 
 автор: Trianon   (09.02.2010 в 09:32)   письмо автору
 
   для: magic   (09.02.2010 в 09:11)
 

Кодировку Вы можете применять какую угодно.
Нужно узнать как у них именуются идентификаторы локализации (как называются локали) - для тех кодировок, которые Вас интересуют к применению. Жесткого стандарта на эти именования, к сожалению, нет.

  Ответить  
 
 автор: magic   (09.02.2010 в 12:06)   письмо автору
 
   для: Trianon   (09.02.2010 в 09:32)
 

Получается если вписывать что-то отличное от "russian", то сразу все выводится на английском. А можно получить хоть намек на то, как реализовать механизм локалей на PHP. Кстати вот так тоже выходят крякозябры
<?setlocale(LC_ALL'ru_RU''rus_RUS');?>

А вот так на английском
<?setlocale(LC_ALL, array('ru_RU.CP1251''rus_RUS.1251'));?>

  Ответить  
 
 автор: Саня   (09.02.2010 в 12:11)   письмо автору
 
   для: magic   (09.02.2010 в 12:06)
 

Кодировка в заголовках сайта совпадает с фактической?

  Ответить  
 
 автор: magic   (09.02.2010 в 12:25)   письмо автору
 
   для: Саня   (09.02.2010 в 12:11)
 

Заголовки у меня вот такие

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="content-language" content="ru">

Страницы отображаются нормально. А вот в календаре месяц выходит коряво. Календарь у меня индклудится к странице, но я так понимаю что кодировка страницы переходит и на календарь.

  Ответить  
 
 автор: Саня   (09.02.2010 в 12:44)   письмо автору
 
   для: magic   (09.02.2010 в 12:25)
 

Как выглядят крякозябры?

  Ответить  
 
 автор: magic   (09.02.2010 в 12:51)   письмо автору
 
   для: magic   (09.02.2010 в 12:25)
 

Вот так
ДХТаРЫм 2010 г.
это типа февраль 2010г.

  Ответить  
 
 автор: Саня   (09.02.2010 в 13:07)   письмо автору
 
   для: magic   (09.02.2010 в 12:51)
 

Видимо данные в русской локали на сервере вашего хостера закодированы в ISO 8859-5.
Нужно прогнать результат функции strftime() через iconv():
<?php
$x 
"ДХТаРЫм";
print 
iconv('iso-8859-5''cp1251'$x);

Это, кстати говоря, ещё один минус strftime() — изначально неизвестно в каких кодировках хранятся локали на сервере.

  Ответить  
 
 автор: magic   (09.02.2010 в 13:18)   письмо автору
 
   для: Саня   (09.02.2010 в 13:07)
 

Вроде работает. Но теперь на локалке отображаются крякозябры, а на хосте нормально пишет. Все же нельзя разве чтоб по людски везде было? Извиняюсь конечно за назойливость.

  Ответить  
 
 автор: Саня   (09.02.2010 в 13:27)   письмо автору
 
   для: magic   (09.02.2010 в 13:18)
 

Значит локаль на локалке закодирована не в ISO 8859-5.
Теперь вы понимаете почему strftime() не популярен? :)

Если не хотите проблем с strftime(), то сделайте так:
<?
$mon 
= array(=> 'Январь',  'Февраль''Март',
                  
'Апрель',  'Май',     'Июнь',
                  
'Июль',    'Август',  'Сентябрь',
                  
'Октябрь''Ноябрь',  'Декабрь');
print 
$mon[date('n')];

Очень хорошее решение, если нужно получить только название месяца.

  Ответить  
 
 автор: magic   (08.02.2010 в 23:39)   письмо автору
 
   для: Саня   (08.02.2010 в 22:32)
 

.

  Ответить  
 
 автор: admiral   (09.02.2010 в 13:28)   письмо автору
 
   для: magic   (08.02.2010 в 23:39)
 

что ты с этой локализацией паришься. Я бы date использовал. Хотя бы ради того, что он переносимая, и проблем с ней не возникает.

  Ответить  
 
 автор: magic   (09.02.2010 в 13:36)   письмо автору
 
   для: admiral   (09.02.2010 в 13:28)
 

Спасибо всем за помощь. Будем пробывать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования