Дата: сегодня, +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 года
Спасибо!
Всё работает.
То, что нужно!
Всё работает.
То, что нужно!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.