G
N
I
D
A
O
L
Вывести дату окончания скидки в карточке товара

Если нужно вывести информацию о скидке в карточке товара, можно воспользоваться методом CCatalogDiscount::GetList. Данные метод позволяет получить любую информацию о скидке: купон, название, типа скидки и.т.д. Но, я думаю, наиболее актуально вывести дату окончания скидки или количество дней до окончания.

Получаем информацию о скидке

Для начала, создаем скидку с интевалом в модуле маркетинга и выводим всю информацию о ней, в карточке товара:

 
$PRODUCT_ID = $arResult['ID'];
$dbProductDiscounts = CCatalogDiscount::GetList(
    array("SORT" => "ASC"),
    array(
            "+PRODUCT_ID" => $PRODUCT_ID,
            "ACTIVE" => "Y",
        ),
    false,
    false,
    array(
            "ID", 
            "SITE_ID", 
            "ACTIVE", 
            "ACTIVE_FROM", 
            "ACTIVE_TO", 
            "RENEWAL", 
            "NAME", 
            "SORT", 
            "MAX_DISCOUNT", 
            "VALUE_TYPE", 
    		"VALUE", 
    		"CURRENCY"
        )
    );
while ($arProductDiscounts = $dbProductDiscounts->Fetch())
{
   print_r($arProductDiscounts)
}

В массиве arProductDiscounts - распечатается вся доступная информация о скидке. Но нам нужна только дата завершения- ACTIVE_TO. Эту дату сразу загоняем в переменную $saleDateTo. Обратите внимание, что если скидка уже осталась в прошлом- дата выведется в любом случае. Что бы этого не происходило, в фильтре оставляем отбор по активности "ACTIVE" => "Y" (флаг активности у прошедших скидок,снимается автоматически).

 
$dbProductDiscounts = CCatalogDiscount::GetList(
    array("SORT" => "ASC"),
    array(
        "+PRODUCT_ID" => $arResult['ID'],
        "ACTIVE" => "Y"
    ),
    false,
    false,
    array(
        "ACTIVE_TO"
    )
);
while ($arProductDiscounts = $dbProductDiscounts->Fetch()) {
        $saleDateTo = $arProductDiscounts['ACTIVE_TO'];
}

Собственно, если нужно просто вывести дату. Выводим переменную $saleDateTo в нужном месте шаблона.

Выводим количество дней до конца скидки

Более актуально, вывести количество дней до конца скидки. При этом, если осталось меньше одного дня, выводит "закончится сегодня".

Просто высчитываем разницу между текущей датой и датой завершения активности скидки. Подсказки в комментариях:

 $diffSaleToDate = strtotime($saleDateTo) - strtotime(date("d.m.Y h:m:s"));
$saleEndDiff = floor($diffSaleToDate / 86000);
if ($saleEndDiff > 1) {
    $daysToEndSale = 'Закончится через ' . $saleEndDiff . ' дн.';
} elseif ($saleEndDiff = 1) {
    $daysToEndSale = 'Закончится сегодня';
} else {
    unset($saleEndDiff);
}

Здесь. С помощью strtotime перевели обе даты (сегодняшний день и дату завершения скидки) в секунды, вычли из большей меньшую и разделили на 86000 (количество секунд в сутках) с округлением до целого числа.

Таким образом, в переменной saleEndDiff получили количество дней до конца скидки. И простым if-ом, создали переменную daysToEndSale c нужным текстом.

Собственно и все. Выводим и красиво оформляем, в нужном месте, переменную $daysToEndSale - c количеством дней до конца скидки.

При желании, можно все оставить в секундах и сделать красивый виджет, обратного отсчета на jquery- тут уже, дело дизайна и техники.