Дата: сегодня, +10 дней, + 20 дней?

Здравствуйте!

Мне требуется вывести такую комбинацию дат:
дата сегодня — 15 ноября 2015 г.
дата через десять дней — 25 ноября 2015 г.
дата через 20 дней — 05 декабря 2015 г.

Нашёл вот такой вариант
<?php
function rus_date() {
    $translate = array(
    "Monday" => "Понедельник",
    "Tuesday" => "Вторник",
    "Wednesday" => "Среда",
    "Thursday" => "Четверг",
    "Friday" => "Пятница",
    "Saturday" => "Суббота",
    "Sunday" => "Воскресенье",
    "January" => "Января",
    "February" => "Февраля",
    "March" => "Марта",
    "April" => "Апреля",
    "May" => "Мая",
    "June" => "Июня",
    "July" => "Июля",
    "August" => "Августа",
    "September" => "Сентября",
    "October" => "Октября",
    "November" => "Ноября",
    "December" => "Декабря"
    );
    
    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);
    }
}
print rus_date("j F Y, l", time() + 864000);
где
, time() + 864000
это + 10 дней к сегодняшней дате в секундах

При таком варианте я создаю три сниппета и вывожу их на странице:
1. дата сегодня в формате 15 ноября 2015 г.
2. + 10 дней — time() + 864000
3. + 20 дней — time() + 1728000

Вариант работает, но приходится создавать три сниппета и я не совсем уверен, что сделал всё правильно.

Я мало грамотен в PHP, и толком не знаю правилен ли мой вариант, который нашёл на просторах интернета.
Подскажите, есть способ сделать это проще и правильнее стандартными средствами MODX или как будет правильно для моего случая?
Ну или как бы это сделали Вы?
Спасибо!
Илья
14 ноября 2015, 21:11
modx.pro
2
1 146
+1

Комментарии: 4

Сергей Шлоков
15 ноября 2015, 08:51
+2
В сниппетах надо использовать return.
Можно в одном сниппете вывести. Кроме того странно использовать посимвольную замену strtr(). Я бы сделал так
<?php
$translate = array(
    "Monday" => "Понедельник",
    "Tuesday" => "Вторник",
    "Wednesday" => "Среда",
    "Thursday" => "Четверг",
    "Friday" => "Пятница",
    "Saturday" => "Суббота",
    "Sunday" => "Воскресенье",
    "January" => "Января",
    "February" => "Февраля",
    "March" => "Марта",
    "April" => "Апреля",
    "May" => "Мая",
    "June" => "Июня",
    "July" => "Июля",
    "August" => "Августа",
    "September" => "Сентября",
    "October" => "Октября",
    "November" => "Ноября",
    "December" => "Декабря"
);
$format = "j F Y, l";
// Вариант 1.
$output[] = str_replace(array_keys($translate), array_values($translate), date($format));
$output[] = str_replace(array_keys($translate), array_values($translate), date($format, time() + 864000));
$output[] = str_replace(array_keys($translate), array_values($translate), date($format, time() + 1728000));
return implode("<br />",$output);

// Вариант 2. Можно в div обернуть
$output = '<div>'.str_replace(array_keys($translate), array_values($translate), date($format)).'</div>';
$output .= '<div>'.str_replace(array_keys($translate), array_values($translate), date($format, time() + 864000)).'</div>';
$output .= '<div>'.str_replace(array_keys($translate), array_values($translate), date($format, time() + 1728000)).'</div>';
return $output;
    Илья
    15 ноября 2015, 11:13
    0
    Спасибо!
    Мне нужно выводить в разных местах страницы.
    Я так понимаю, Ваш вариант выводит в одном месте.
    Василий Столейков
    15 ноября 2015, 09:40
    1
    +2
    А я бы сделал немного по-другому.

    1. Создаём сниппет date.

    2. Вставляем в него код:
    <?php
    $d = $modx->getOption('d',$scriptProperties,0);
    $format = $modx->getOption('format',$scriptProperties,'j F Y г.');
    $translate = array(
        "Monday" => "Понедельник",
        "Tuesday" => "Вторник",
        "Wednesday" => "Среда",
        "Thursday" => "Четверг",
        "Friday" => "Пятница",
        "Saturday" => "Суббота",
        "Sunday" => "Воскресенье",
        "January" => "января",
        "February" => "февраля",
        "March" => "марта",
        "April" => "апреля",
        "May" => "мая",
        "June" => "июня",
        "July" => "июля",
        "August" => "августа",
        "September" => "сентября",
        "October" => "октября",
        "November" => "ноября",
        "December" => "декабря"
    );
    $date = strtotime("$d day");
    $output = str_replace(array_keys($translate), array_values($translate), date($format, $date));
    return $output;

    3. Вызываем наш сниппет в 3-х местах с нужными параметрами:
    дата сегодня — [[!date]] // выведет 15 ноября 2015 г.
    дата через десять дней — [[!date?&d=`+10`]] // выведет 25 ноября 2015 г.
    дата через 20 дней — [[!date?&d=`+20`]] // выведет 05 декабря 2015 г.
    Можно и в другую сторону:
    дата за десять дней — [[!date?&d=`-10`]] // выведет 5 ноября 2015 г.
    Также можно менять формат вывода, по умолчанию j F Y г.:
    [[!date?&d=`-10` &format=`j F Y года`]] // выведет 5 ноября 2015 года
      Илья
      15 ноября 2015, 11:14
      0
      Спасибо!
      Всё работает.
      То, что нужно!
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        4