Дата: сегодня, +10 дней, + 20 дней?
        Здравствуйте!
Мне требуется вывести такую комбинацию дат:
дата сегодня — 15 ноября 2015 г.
дата через десять дней — 25 ноября 2015 г.
дата через 20 дней — 05 декабря 2015 г.
Нашёл вот такой вариант
При таком варианте я создаю три сниппета и вывожу их на странице:
1. дата сегодня в формате 15 ноября 2015 г.
2. + 10 дней — time() + 864000
3. + 20 дней — time() + 1728000
Вариант работает, но приходится создавать три сниппета и я не совсем уверен, что сделал всё правильно.
Я мало грамотен в PHP, и толком не знаю правилен ли мой вариант, который нашёл на просторах интернета.
Подскажите, есть способ сделать это проще и правильнее стандартными средствами MODX или как будет правильно для моего случая?
Ну или как бы это сделали Вы?
Спасибо!
    
    
                                                                                
            Мне требуется вывести такую комбинацию дат:
дата сегодня — 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 или как будет правильно для моего случая?
Ну или как бы это сделали Вы?
Спасибо!
Комментарии: 4
                В сниппетах надо использовать return.
Можно в одном сниппете вывести. Кроме того странно использовать посимвольную замену strtr(). Я бы сделал так
                    Можно в одном сниппете вывести. Кроме того странно использовать посимвольную замену 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;            
                Спасибо!
Мне нужно выводить в разных местах страницы.
Я так понимаю, Ваш вариант выводит в одном месте.
                    Мне нужно выводить в разных местах страницы.
Я так понимаю, Ваш вариант выводит в одном месте.
                А я бы сделал немного по-другому.
1. Создаём сниппет date.
2. Вставляем в него код:
3. Вызываем наш сниппет в 3-х местах с нужными параметрами:
                    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 года            
                Спасибо!
Всё работает.
То, что нужно!
                    Всё работает.
То, что нужно!
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.