За последние 24 часа нас посетил 21421 программист и 1024 робота. Сейчас ищет 691 программист ...

Разный вывод времени

Тема в разделе "Прочие вопросы по PHP", создана пользователем Васяня, 25 мар 2019.

  1. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Есть скрипт:
    PHP:
    1. <?php
    2.  
    3. setlocale(LC_TIME, 'ru_RU.utf8');
    4. echo strftime('%d %B %Y', strtotime('now'));
    На локалке выводит всё правильно "25 марта 2019".
    На продакшене "25 Март 2019".

    Не могу понять в чём дело может библиотеки какие то отличаются или настройка какая то где то есть.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Пхп не сам придумывает локали, это системная штука. Какие у тебя ОС на локалке и на продакшн?
     
  3. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    На локалке linux mint 19.1, на продакшене CentOS 7
     
  4. Павел Голубцов

    Павел Голубцов Активный пользователь

    С нами с:
    4 мар 2019
    Сообщения:
    183
    Симпатии:
    4
    Есть такая штука может поможет.

    PHP:
    1. function dateToRussian($date) {
    2.     $month = array("january"=>"января", "february"=>"февраля", "march"=>"марта", "april"=>"апреля", "may"=>"мая", "june"=>"июня", "july"=>"июля", "august"=>"августа", "september"=>"сентября", "october"=>"октября", "november"=>"ноября", "december"=>"декабря");
    3.     $days = array("monday"=>"Понедельник", "tuesday"=>"Вторник", "wednesday"=>"Среда", "thursday"=>"Четверг", "friday"=>"Пятница", "saturday"=>"Суббота", "sunday"=>"Воскресенье");
    4.     return str_replace(array_merge(array_keys($month), array_keys($days)), array_merge($month, $days), strtolower($date));
    5.     }
    6.     echo dateToRussian(date('l, j F Y')).' года';
     
    [vs] нравится это.
  5. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
  6. freebsdd

    freebsdd Активный пользователь

    С нами с:
    16 апр 2019
    Сообщения:
    26
    Симпатии:
    2
    Это не костыли, это универсализированный вариант, чтоб не было траты времени на то, на что тратите Вы)
     
  7. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Быстро не есть правильно.
    --- Добавлено ---
    Я хочу знать причину этого поведения
     
  8. freebsdd

    freebsdd Активный пользователь

    С нами с:
    16 апр 2019
    Сообщения:
    26
    Симпатии:
    2
    Пожалуй не соглашусь, настройки у каждого сервака могут отличаться, а если подстраивать по локали и прочее, то всегда будут сюрпризы при миграции, на другую операционку или поднятии бэкапа на перенастроенную операционку или после обновлений и пр. пр. пр... Однако, каждому своё)
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Так вроде прозвучала причина: используется системная локаль, она может отличаться в разных ос или дистрибутивах ос. Что такое локаль знаешь?

    Хочешь сделать их одинаковыми — подавай запросы мейнтейнерам этих дистрибутивов.
    Хочешь чтобы работало везде — делай свою функцию как подсказывают.
     
    freebsdd нравится это.