使用日期脚本更改徽标

时间:2009-10-29 09:57:04

标签: php arrays

我只是想知道是否有人可以指出我正确的方向:我正在制作一个脚本,根据日期,我网站上的徽标会发生变化;所以例如很快就会出现haloween风格。

我开始时有2个数组,1个开始日期和1个结束日期(不确定即使这是最好的方法!):

<?php
$start_dates = array('01/01' => 'New Years',
                     '14/02' => 'Valentine Day',
                     '16/02/2010' => 'Pancake Day',
                     '17/03' => 'St Patricks Day',
                     '01/04' => 'April Fools',
                     '02/04/2010' => 'Easter',
                     '23/04' => 'St Georges Day',
                     '11/06/2010' => 'World Cup',
                     '31/10' => 'Halloween',
                     '05/11' => 'Guy Fawkes',
                     '11/11' => 'Armistice Day',
                     '16/10' => 'Today',
                     '15/12' => 'Christmas');

$end_dates = array( '08/01' => 'New Years',
                    '15/02' => 'Valentine Day',
                    '17/02/2010' => 'Pancake Day',
                    '18/03' => 'St Patricks Day',
                    '02/04' => 'April Fools',
                    '06/04/2010' => 'Easter',
                    '24/04' => 'St Georges Day',
                    '12/07/2010' => 'World Cup',
                    '01/11' => 'Halloween',
                    '06/11' => 'Guy Fawkes',
                    '12/11' => 'Armistice Day',
                    '17/10' => 'Today',
                    '01/01' => 'Christmas');
?>

到目前为止很容易...问题是,如果今天的日期介于开始日期和结束日期之间,那么我需要一种解决方法,然后更改图像文件名。

这是一个很长的镜头,但我希望有人能够提供帮助。

谢谢, 乙

2 个答案:

答案 0 :(得分:0)

像这样

$events = array(
    'New Year' => '01/01 01/08',
    'Pancake Day' => '16/02/2010 17/02/2010',
    //etc
);

echo find_event($events, '16/02');

其中find_event()是

function mdy2time($date) {
    $e = explode('/', $date);
    if(count($e) < 3)
        $e[] = '2010';
    return strtotime("$e[1]-$e[0]-$e[2]");
}

function find_event($events, $date = null) {
    $date = is_null($date) ? time() : mdy2time($date);

    foreach($events as $name => $range) {
        list($start, $end) = explode(' ', $range);
        if($date >= mdy2time($start) && $date <= mdy2time($end))
            return $name;
    }
    return null;
}

答案 1 :(得分:0)

你应该使用更像这样的数组:

$dates = array();
$dates[] = array(
    'name' => 'New Years'
    'start' = '01/14',
    'end' => '01/20',
    'style' => 'haloween',
);
$dates[] = array(
    //...
);

然后你可以得到如下风格:

$style='default';

// date as number e.g. 130 (january 30th)
$currDate = date('md',time()) * 1;
foreach ($dates AS $k => $v) {
    $tmp = explode("/",$v['start'];
    $start = ($tmp[1].$tmp[0])*1;
    $tmp = explode("/",$v['end'];
    $stop = ($tmp[1].$tmp[0])*1;
    if ($start <= $currDate && $currDate < $stop) {
        $style=$v['style'];
        break;
    }
}

echo 'style: '.$style;

尚未查看代码,如果错误,请随时纠正我。