【问题标题】:Logo change with date script使用日期脚本更改徽标
【发布时间】:2009-10-29 09:57:03
【问题描述】:

我只是想知道是否有人能指出我正确的方向:我正在寻找一个脚本,以便我的网站上的徽标根据日期而变化;例如,很快就会出现一种万圣节风格。

我一开始有 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');
?>

到目前为止很简单...问题是我需要一种方法来计算今天的日期是否介于开始日期和结束日期之间,然后更改图像文件名。

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

谢谢, B.

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    喜欢这个

    $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;
    }
    

    【讨论】:

      【解决方案2】:

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

      $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;
      

      还没有检查代码,如果我错了,请随时纠正我。

      【讨论】:

        猜你喜欢
        • 2013-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        相关资源
        最近更新 更多