Tarih komut ile Logo değişimi

2 Cevap php

Herkes bana doğru yönde işaret edebilir, ben sadece merak: Ben sitemde logosu tarihine bağlı olarak değişir sayede bir komut dosyası yapmak için arıyorum; çok yakında örneğin bir haloween tarzı tek.

Ben 2 diziler, başlangıç ​​tarihleri ​​1 ve bitiş tarihleri ​​(! Bu en iyi yoldur bile emin değilim) 1. alarak başladı:

<?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');
?>

Kolay kadar ... bugünün tarihi daha sonra resim dosyası adını değiştirerek, başlangıç ​​tarihi ve bitiş tarihi arasındaki düşerse ben çalışan bir yol gerekir problemle karşılaşıldı.

Onun uzun bir atış ama kimse tür yeterli yardımcı olacağını umuyoruz.

Thanks, B.

2 Cevap

böyle

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

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

burada find_event () 'dir

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

daha böyle bir dizi kullanmak gerekir:

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

aşağıdaki gibi daha sonra stili alabilirsiniz:

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

Henüz kodunu kontrol, eğer öyleyse iam yanlış beni düzeltmek için çekinmeyin vermedi.