Вход • Регистрация

Вывод характеристики товара типа ДАТА в разных форматах.

  • 29 января 2015 г.
  • Добрый день, прошу помочь со следующей задачей.

    У товара имеется дополнительная характеристика типа ДАТА, название «Дата выхода». Необходимо вывести эту характеристику отдельно в разных местах и в различных форматах отображения. Чтобы просто вывести данную характеристику, т.е. полную дату (дд.мм.гггг) в нужном месте я делал так:

    Код
    if(! empty($row["names_param"]["Дата блюда"]))
    {
    echo $row["names_param"]["Дата выхода"]["value"];
    }



    Это только часть дела. Теперь нужно в разных местах вывести эту же дату в таких видах:

    • Понедельник - т.е. определить по дате какой это день недели и вывести только день недели
    • 12 января - т.е. вывести дату числом, месяц полностью прописью и БЕЗ года
    • День 1 - т.е. вместо дня недели прописью указать день недели в виде числа по очередности… т.е. день 1 – это понедельник, день 2 – это вторник и т.д.


    Заранее спасибо!
    • 29 января 2015 г.
    • http://php.net/manual/ru/function.date.php
      не за что)
      • 30 января 2015 г. , редакция: 30 января 2015 г.
      • Спасибо! частично понял, но т.к. в ПХП не силен... есть вопросы...

        если указываю так:
        Код
        if(! empty($row["names_param"]["Дата блюда"]))
        {
        echo $row["names_param"]["Дата выхода"]["value"];
        }

        то дата выводится правильная, т.е. которую в админке поставил.

        Затем пробую вот так сделать:

        Код
        if(! empty($row["names_param"]["Дата выхода"]))
        {
        echo $datenew = date("d F Y l", $row["names_param"]["Дата выхода"]["value"]);
        }

        то выводит вот что - 01 January 1970 Thursday

        отсюда вопросы:
        1. почему вместо нужной даты, теперь 01.01.1970? что не так у меня и как исправить?
        2. как русские значения дней недели и месяцев сделать?
        • 30 января 2015 г.
        • 1. почему вместо нужной даты, теперь 01.01.1970? что не так у меня и как исправить?
          потому что второй параметр у данной функции метка времени, а не строка

          насчет остального, читайте исходники, ну или документацию

          вот функция из ядра
          Код

          public function formate_in_date($date)
          {
          if(! preg_match('/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/', trim($date), $matches))
          {
          return '0000-00-00';
          }
          list($dummy, $day, $month, $year) = $matches;
          if($day > 31)
          {
          $day = 31;
          }
          if($month > 12)
          {
          $month = 12;
          }
          $date = $year.'-'.$month.'-'.$day;
          return $date;
          }


          соответственно, вам ее надо что-т похожее свое написать, вроде
          для
          Цитата
          Понедельник - т.е. определить по дате какой это день недели и вывести только день недели

          будет
          Код

          public function get_day($date)
          {
          $day_arr = array(
          1 => 'понедельник',
          2 => 'вторник',
          3 => 'среда',
          4 => 'четверг',
          5 => 'пятница',
          6 => 'суббота',
          7 => 'воскресенье'
          );
          if(! preg_match('/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/', trim($date), $matches))
          {
          return '0000-00-00';
          }
          list($dummy, $day, $month, $year) = $matches;
          if($day > 31)
          {
          $day = 31;
          }
          if($month > 12)
          {
          $month = 12;
          }
          $_day = $day_arr[$day] ;
          return $_day;
          }


          остальное практически так же

          ну и не надо на каждый вариант писать функцию, напишите одну, в которую будете передавать параметр, в зависимости от которого будет выводиться то, что нужно
          • 30 января 2015 г.
          • по поводу метки и строки... по первому вопросу. Применяю функцию strtotime() но тоже не совсем получается.

            Делаю так:
            Код
            if(! empty($row["names_param"]["Дата выхода"]))
            {
            $ttt = strtotime('$row["names_param"]["Дата выхода"]["value"]');
            echo $datenew = date("d F Y l", $ttt);
            }


            Получаю результат 01 January 1970 Thursday

            Для проверки в strtotime указал дату вручную:
            Код
            if(! empty($row["names_param"]["Дата выхода"]))
            {
            $ttt = strtotime('25.01.2015');
            echo $datenew = date("d F Y l", $ttt);
            }


            Теперь отображает - 25 January 2015 Sunday, т.е. то что указал вручную

            Не могу понять почему с функцией strtotime($row["names_param"]["Дата выхода"]["value"]') не получается тоже самое.
            • 30 января 2015 г.
            • потому что в
              Цитата
              $row["names_param"]["Дата выхода"]["value"]'
              попадает еще тег span от редактора, попробуйте сделать

              Код
              strtotime(strip_tags($row["names_param"]["Дата выхода"]["value"]'))
  • 31 января 2015 г.
  • Ребята! прошу прощения... видать уже голова не работала и глаза замылились и допустил ошибку, поэтому не работало! В общем всем спасибо и отдельно Андрей (resiteperm) - всё таки правильно всё было... вот так всё работает:
    Код
    if(! empty($row["names_param"]["Дата выхода"]))
    {
    $new = strip_tags($row["names_param"]["Дата выхода"]["value"]);
    $datanews = strtotime($new);
    echo $date_d = date("d F Y l", $datanews);
    }


    А ошибка была в слове "выхода" - ы пропустил...

    Теперь буду над локализацией (русские названия) работать :)
    • 31 января 2015 г.
    • Проще по ID характеристику выводить, тогда проблем не будет с языком:)
  • 31 января 2015 г.
  • С переводом на русский тоже решил. Гугл помог найти вот этот код:
    Код
    public function rus_date() {
    $translate = array(
    "am" => "дп",
    "pm" => "пп",
    "AM" => "ДП",
    "PM" => "ПП",
    "Monday" => "Понедельник",
    "Mon" => "Пн",
    "Tuesday" => "Вторник",
    "Tue" => "Вт",
    "Wednesday" => "Среда",
    "Wed" => "Ср",
    "Thursday" => "Четверг",
    "Thu" => "Чт",
    "Friday" => "Пятница",
    "Fri" => "Пт",
    "Saturday" => "Суббота",
    "Sat" => "Сб",
    "Sunday" => "Воскресенье",
    "Sun" => "Вс",
    "January" => "Января",
    "Jan" => "Янв",
    "February" => "Февраля",
    "Feb" => "Фев",
    "March" => "Марта",
    "Mar" => "Мар",
    "April" => "Апреля",
    "Apr" => "Апр",
    "May" => "Мая",
    "May" => "Мая",
    "June" => "Июня",
    "Jun" => "Июн",
    "July" => "Июля",
    "Jul" => "Июл",
    "August" => "Августа",
    "Aug" => "Авг",
    "September" => "Сентября",
    "Sep" => "Сен",
    "October" => "Октября",
    "Oct" => "Окт",
    "November" => "Ноября",
    "Nov" => "Ноя",
    "December" => "Декабря",
    "Dec" => "Дек",
    "st" => "ое",
    "nd" => "ое",
    "rd" => "е",
    "th" => "ое"
    );

    if (func_num_args() > 1) {
    $timestamp = func_get_arg(1);
    return strtr(date(func_get_arg(0), $timestamp), $translate);
    } else {
    return strtr(date(func_get_arg(0)), $translate);
    }
    }


    Этот кусок кода вставил в файл core.php - надеюсь что в правильный файл его вставил... по крайней мере работает :)

    А далее в нужных местах вместо date() использую $this->diafan->rus_date().

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум