|
|
|
| Добрый день.
Пишу функцию для сайта которая отображает день недели события а так же проверяет когда оно будет
если сегодня > выводим сегодня
если завтра > выводим завтра
если прошло > выводим прошло
иначе выводим день недели.
Вот сама функция
<?php
$date = "24.02.2012";
function poster_day($date = '') {
if($date != '') {
$today = date( "d" );
$tomorrow = date( "d" ) + 1;
$tomonth = date( "m" );
$toyear = date( "Y" );
$date_arr = explode( '.', $date );
$week = JDDayOfWeek( cal_to_jd( CAL_GREGORIAN, $date_arr[1], $date_arr[0], $date_arr[2] ), 0 );
$week_text = array(
'Воскресенье',
'Понедельник',
'Вторник',
'Среда',
'Четверг',
'Пятница',
'Суббота'
);
if( $today == $date_arr[0] && $tomonth == $date_arr[1] && $toyear == $date_arr[2] ) {
return 'Сегодня';
} elseif ( $tomorrow == $date_arr[0] && $tomonth == $date_arr[1] && $toyear == $date_arr[2] ) {
return 'Завтра';
} elseif( $date_arr[0] < $today && $date_arr[1] <= $tomonth && $date_arr[2] <= $toyear ) {
return 'Прошло';
} else {
return $week_text[$week];
}
}
}
?>
|
Все работает кроме последнего условия где идет проверка с годом Прошло мероприятие или нет.
Видимо не верно проверять даты 2011 <= 2012
В чем я ошибся? | |
|
|
|
|
|
|
|
для: ZetRider
(24.02.2012 в 11:37)
| | база данных используется? | |
|
|
|
|
|
|
|
для: Valick
(24.02.2012 в 12:48)
| | Дату получаем из Mysql хранится в таком же виде 24.02.2012 | |
|
|
|
|
|
|
|
для: ZetRider
(24.02.2012 в 12:54)
| | Дату получаем из Mysql хранится в таком же виде 24.02.2012
чем обусловлен выбор именно такого хранения даты? чем не устраивают стандартные типы?
CREATE TABLE `sobitie` (
`id` int(11) NOT NULL auto_increment,
`d` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;
<?php
$week_text = array(
'Понедельник',
'Вторник',
'Среда',
'Четверг',
'Пятница',
'Суббота',
'Воскресенье'
);
$query="SELECT DATE_FORMAT(d,'%d.%m.%Y') AS p, (CASE
WHEN TO_DAYS(d) - TO_DAYS(NOW()) < -1 THEN 'Прошло'
WHEN TO_DAYS(d) - TO_DAYS(NOW()) = -1 THEN 'Вчера'
WHEN TO_DAYS(d) - TO_DAYS(NOW()) = 0 THEN 'Сегодня'
WHEN TO_DAYS(d) - TO_DAYS(NOW()) = 1 THEN 'Завтра'
WHEN TO_DAYS(d) - TO_DAYS(NOW()) > 1 THEN WEEKDAY(d) ELSE d END) AS t
FROM sobitie";
$res=mysql_query($query);
while($m = mysql_fetch_assoc($res)){
if(is_numeric($m[t])) $m[t]=$week_text[$m[t]];
echo "$m[p] <a href=#>$m[t]</a><br />";
}
?>
|
вот как-то так и доставать все это можно сразу с остальными данными, ну и добавить условия если нужны | |
|
|
|
|
|
|
|
для: ZetRider
(24.02.2012 в 11:37)
| | Надежнее всех перевести дату в UNIXSTAMP при помощи функции mktime() и сравнивать её со значением, возвращаемым функцией time(). | |
|
|
|