Форум УральскИнфо — 22 года вместе!

Здравствуйте, гость ( Вход | Восстановить аккаунт )

> Вывод сообщения через каждые N-дней
ku7mich
сообщение 1.11.2010, 17:53
Сообщение #1


Гуру
***

Группа: Пользователи
Сообщений: 960
Регистрация: 20.11.2005
Пользователь №: 810



Вывод определённого сообщения каждые 4-дня. До 1-го ноября всё было пучком, а вот первого, разность между датами равняется 15, вместо 16. Где я тупанул, подскажите?

<?php
setlocale(LC_TIME, "ru-RU");

// Дата одного из респов, начало отсчёта для счётчика
$sd=date ("d-M-Y", mktime(0,0,0, 10, 16, 2010));

// Текущая дата
$cd=date ("d-M-Y", mktime(0,0,0));

// Периода респа. В данном случае 4 дня
$i=4;

$zd=($cd-$sd)%$i;
$dd=$i-$zd;

if ($zd==0)
{
echo ("<div><font color=#ff0000><b>Сегодня большой респ!</font></b> Cбор в Ventrillo в: <b>10:00 (по Москве)</b></div>");
}
else
{
echo ("<div>Следующий большой респ: <b>".strftime("%A %e %B %Y", mktime(0, 0, 0, date("m"), date("d")+$dd , date("Y")))."</b></div>");
}

?>


--------------------
"Как странно – когда исчезает темнота, перестаешь видеть свет!" (С. Лукьяненко)
Перейти в начало страницы
 
+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 10)
Sight
сообщение 1.11.2010, 20:47
Сообщение #2


жмот
***

Группа: Пользователи
Сообщений: 1658
Регистрация: 18.6.2005
Из: 1 777
Пользователь №: 635



А чему равна cd или zd, в определенный момент времени? В каком формате переменная?
Ваще прально он тебе минусует. 1-16= -15 smile.gif Конечно если раньше было 28-16, 24-16, 20-16, все было намана и на 4 делилось smile.gif


--------------------
Я,как зверь,зализываю раны...
И, как кофе,растворяю горе...
Пахну счастьем,солнцем и кальяном...
Приезжай! Скучаю! (подпись)"Море!"
Перейти в начало страницы
 
+Цитировать сообщение
Mirima
сообщение 1.11.2010, 22:40
Сообщение #3


Гуру
***

Группа: Пользователи
Сообщений: 937
Регистрация: 1.11.2005
Из: 1 134
Пользователь №: 767



Разность между 1 ноября и 16 октября - 16 дней.

? DateDiff("d", "16-Oct-2010", "1-Nov-2010")
16

В чем проблема, невовремя сообщение выходит?


--------------------
у айтишника прежде всего должно быть развито два основных навыка: знание английского и умение гуглить (с) башорг
Перейти в начало страницы
 
+Цитировать сообщение
U_Shlepak
сообщение 2.11.2010, 7:15
Сообщение #4


Добродушный циник
***

Группа: Пользователи
Сообщений: 680
Регистрация: 20.4.2007
Из: жалости...
Пользователь №: 2713



О чём речь ваще?! smile.gif))))))))


--------------------
Рациональные законы мышления не охватывают плоскость чувственного воcприятия бытия
Перейти в начало страницы
 
+Цитировать сообщение
ku7mich
сообщение 2.11.2010, 9:00
Сообщение #5


Гуру
***

Группа: Пользователи
Сообщений: 960
Регистрация: 20.11.2005
Пользователь №: 810



А чему равна cd или zd, в определенный момент времени? В каком формате переменная?
$sd=date ("d-M-Y", mktime(0,0,0, 10, 16, 2010)) - задана вручную, выводит 16-Oct-2010
$cd=date ("d-M-Y", mktime(0,0,0)) - сегодняшняя дата, обновляется каждый раз, когда обновляется страница.
$zd - это остаток при делении разницы между днём сегодняшним ($cd) и стартовой датой ($sd).

mktime - Функция возвращает метку времени Unix, соответствующую дате и времени, заданным аргументами. Метка времени - это целое число равное разнице в секундах между заданной датой/временем и началом Эпохи Unix (The Unix Epoch, 1 января 1970 г). Соответственно $sd и $cd - целое число.

date_diff
(PHP 5 >= 5.3.0)
У хостера 5.2.5. Или ты предлагаешь через mysql?
Он мне 1-го числа выдал неправильное сообщение, т.е. не удовлетворял первому условию и вывел второе сообщение вместо первого.

Да, Sight прав, у меня вычитаются дни, а мне надо чтобы вычитались даты. Пойду чего-нибудь покурю.

Сообщение отредактировал ku7mich - 2.11.2010, 9:04


--------------------
"Как странно – когда исчезает темнота, перестаешь видеть свет!" (С. Лукьяненко)
Перейти в начало страницы
 
+Цитировать сообщение
алерген
сообщение 2.11.2010, 9:15
Сообщение #6


Бакалавр
***

Группа: Пользователи
Сообщений: 74
Регистрация: 3.7.2010
Пользователь №: 9959



для подсчета разницы в днях используй date с параметром z

z Порядковый номер дня в году (нумерация с 0) От 0 до 365
Перейти в начало страницы
 
+Цитировать сообщение
ku7mich
сообщение 2.11.2010, 9:21
Сообщение #7


Гуру
***

Группа: Пользователи
Сообщений: 960
Регистрация: 20.11.2005
Пользователь №: 810



Не подходит. Что мне использовать через два года? Придётся снова дату начала отсчёта менять.
Сейчас нашёл самописную функцию datediff или вариант чуть попроще.


--------------------
"Как странно – когда исчезает темнота, перестаешь видеть свет!" (С. Лукьяненко)
Перейти в начало страницы
 
+Цитировать сообщение
Mirima
сообщение 2.11.2010, 17:48
Сообщение #8


Гуру
***

Группа: Пользователи
Сообщений: 937
Регистрация: 1.11.2005
Из: 1 134
Пользователь №: 767



Попроще поясни, в чем проблема? На мой взгляд, код у тя работает верно. Дело не в функциях, а в том, чего ты хотел добиться.


--------------------
у айтишника прежде всего должно быть развито два основных навыка: знание английского и умение гуглить (с) башорг
Перейти в начало страницы
 
+Цитировать сообщение
geget
сообщение 2.11.2010, 23:45
Сообщение #9


Бакалавр
***

Группа: Пользователи
Сообщений: 94
Регистрация: 20.9.2010
Пользователь №: 11331



попробуй так:
<?php
setlocale(LC_TIME, "ru-RU");

// Дата одного из респов, начало отсчёта для счётчика
//$sd=date ("d-M-Y", mktime(0,0,0, 10, 16, 2010));
$sd=date (mktime(0,0,0, 10, 16, 2010));

// Текущая дата
//$cd=date ("d-M-Y", mktime(0,0,0));
$cd=date (mktime(0,0,0));
//$cd=time();

// Периода респа. В данном случае 4 дня
$i=4;

$cd=($cd-($cd % 100))/100;
$sd=($sd-($sd % 100))/100;
$zd=(($cd-$sd)/864)%$i;
$dd=$i-$zd;

if ($zd==0)
{
echo ("<div><font color=#ff0000><b>Сегодня большой респ!</font></b> Cбор в Ventrillo в:

<b>10:00 (по Москве)</b></div>");
}
else
{
echo ("<div>Следующий большой респ: <b>".strftime("%A %e %B %Y", mktime(0, 0, 0,

date("m"), date("d")+$dd , date("Y")))."</b></div>");
}

?>
Перейти в начало страницы
 
+Цитировать сообщение
geget
сообщение 2.11.2010, 23:49
Сообщение #10


Бакалавр
***

Группа: Пользователи
Сообщений: 94
Регистрация: 20.9.2010
Пользователь №: 11331



Делением на 100 обрубаем время от даты (альтернатива div, в php не припомню такой функции), затем разницу делим на 864 - один день. Не уверен на 100%, но должно работать, по крайней мере не извращаться со сторонними функциями.
Перейти в начало страницы
 
+Цитировать сообщение
ku7mich
сообщение 13.12.2010, 10:14
Сообщение #11


Гуру
***

Группа: Пользователи
Сообщений: 960
Регистрация: 20.11.2005
Пользователь №: 810



Спасибо, работает smile.gif. И действительно, что-то я сразу не подумал результат mktime на 100 разделить, меня ведь с самого начала эти нули в конце смущали.


--------------------
"Как странно – когда исчезает темнота, перестаешь видеть свет!" (С. Лукьяненко)
Перейти в начало страницы
 
+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Сейчас: 11.11.2026, 23:33