Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа с датами и JDDayOfWeek, Сегодня, Завтра, Прошло
 
 автор: ZetRider   (24.02.2012 в 11:37)   письмо автору
 
 

Добрый день.

Пишу функцию для сайта которая отображает день недели события а так же проверяет когда оно будет
если сегодня > выводим сегодня
если завтра > выводим завтра
если прошло > выводим прошло
иначе выводим день недели.

Вот сама функция

<?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      JDDayOfWeekcal_to_jdCAL_GREGORIAN$date_arr[1], $date_arr[0], $date_arr[2] ), );

        
$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

В чем я ошибся?

  Ответить  
 
 автор: Valick   (24.02.2012 в 12:48)   письмо автору
 
   для: ZetRider   (24.02.2012 в 11:37)
 

база данных используется?

  Ответить  
 
 автор: ZetRider   (24.02.2012 в 12:54)   письмо автору
 
   для: Valick   (24.02.2012 в 12:48)
 

Дату получаем из Mysql хранится в таком же виде 24.02.2012

  Ответить  
 
 автор: Valick   (24.02.2012 в 15:42)   письмо автору
 
   для: 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 />";
}
?>

вот как-то так и доставать все это можно сразу с остальными данными, ну и добавить условия если нужны

  Ответить  
 
 автор: cheops   (24.02.2012 в 13:11)   письмо автору
 
   для: ZetRider   (24.02.2012 в 11:37)
 

Надежнее всех перевести дату в UNIXSTAMP при помощи функции mktime() и сравнивать её со значением, возвращаемым функцией time().

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования