Перейти к содержимому


Информация о заказах за прошлый месяц в админке


  • Вы не можете ответить в тему
Сообщений в теме: 4

#1 xtic

    Пользователь

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 1
Начинающий
  • ГородНижнекамск

Отправлено 20 December 2013 - 01:22 PM

Поискал такое на форуме, не нашел. Может еще кому-то будет полезно.

В фале /core/includes/admin/totals.php после

$total["revenue_thismonth"] = show_price($a, $currtransform );

вставляем

$LASTMONTH = date("Y-m-01", mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
		$q = db_query("select order_amount, currency_value from ".ORDERS_TABLE." where statusID > 1 and order_time > '".$LASTMONTH."' and order_time < '".$THISMONTH."'");
		$n = 0;
		$a = 0;
		while($r = db_fetch_row($q))
		{
				$a += $r[0];
				$n++;
		}
		$total["orders_lastmonth"] = $n;
		$total["revenue_lastmonth"] = show_price($a, $currtransform );

В файле core/tpl/admin/default.tpl.html после

<div class="marg"><b>{$smarty.const.ADMIN_MENU_ORD_MON}:</b><br>{$totals.orders_thismonth} {$smarty.const.ADMIN_MENU_ORD_NAME} ({$totals.revenue_thismonth})</div>

вставляем

<div class="marg"><b>Прошлый месяц:</b><br>{$totals.orders_lastmonth} {$smarty.const.ADMIN_MENU_ORD_NAME} ({$totals.revenue_lastmonth})</div>

Выглядит примерно так Прикрепленный файл  Безымянный2.png   10.52К   8 Количество загрузок:

Все :)
  • 1

#2 Robby

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 31 December 2013 - 10:29 AM

Обнаружился интересный глюк, вчера 30 декабря отображалось кол-во заказов за прошлый месяц, сегодня 31 декабря выглядит так:
Прошлый месяц:
0 заказ(ов) ($ 0.00)
  • 0

#3 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 31 December 2013 - 03:57 PM

вчера 30 декабря отображалось кол-во заказов за прошлый месяц, сегодня 31 декабря выглядит так:

Это из-за строки

$LASTMONTH = date("Y-m-01", mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));

31-го декабря mktime(0, 0, 0, date("m")-1, date("d"), date("Y")) будет равно 31-му ноября, т.е. 1-му декабря.

PS. Как я понимаю, весь январь то же самое будет, т.к. $LASTMONTH будет 1-го декабря 2014.

PPS. в запросах MySQL есть функции времени и даты, в том числе и позволяющие получить "дату месяц назад" (INTERVAL). Как мне кажется, проще использовать их. А в PHP 5.3 уже есть класс DateTime, позволяющий вычитать/прибавлять к дате дни, месяцы и годы без всех этих хитростей с функцией data().
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 Robby

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 31 December 2013 - 04:29 PM

А если строку изменить так:
$LASTMONTH = date("Y-m-01", strtotime(date('Y-m')." -1 month"));

  • 0

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 31 December 2013 - 05:20 PM

А если строку изменить так:

Ну так попробуйте. Ведь это Вам нужен результат, а не мне :).
По описанию стандарта (http://www.gnu.org/s...ut-formats.html) достаточно даже strtotime("-1 month").
Но в том же документе довольно четко написано (цитата):
The fuzz in units can cause problems with relative items. For example, ‘2003-07-31 -1 month’ might evaluate to 2003-07-01, because 2003-06-31 is an invalid date. To determine the previous month more reliably, you can ask for the month before the 15th of the current month.

Другими словами, надо не date('Y-m'), а что-нибудь типа date('Y-m-15'), тогда месяц по любому будет предыдущим :).

PS. Хотя по факту

<?php
echo date('d-m-Y',strtotime('-1 month'))."\n";
echo date('d-m-Y',strtotime(date('Y-m').' -1 month'))."\n";
echo date('d-m-Y',strtotime(date('Y-m-15').' -1 month'))."\n";
?>

выводит
01-12-2013
01-11-2013
15-11-2013
т.е. вторая строка дает искомое.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)