Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Viikon valinta

Olli [24.12.2012 08:25:58]

#

Tein PHP:llä viikon valitsimen, mutta jotenkin tuntuu, että siitä tuli melko monimutkainen. Pystyisiköhän samaa asiaa tekemään yhtään helpommin? En ole myöskään täysin varma, toimiiko tuo seuraavaan vuoteen automaattinen siirtyminen oikein.

Demo

<?php
print"<ul>";
$year = $_GET["year"]; if(empty($year)){$year = date('Y'); }
$week = $_GET["week"]; if(empty($week)){$week = date('W'); }

function weekAction($action, $amount, $year, $week){

	if($action == "+"){
		$week = $week+$amount;

		if($week > 52){
			$week = 1;
			$year = $year+1;
			define("week_nextyr", "true");
		}

		if(week_nextyr == "true"){
			$amount = $amount-1;
			$week = $week+$amount;
		}

	} elseif($action == "-"){
		$week = $week-$amount;

		if($week < 1){
			$week = 52;
			$year = $year-1;
		}
	}

	return array($week, $year);

}

function printSelector($weekArray, $symbol = ""){
	$weekTemp = $weekArray[0];
	$yearTemp = $weekArray[1];

	if(empty($symbol)){ $symbol = $weekTemp; }

	print"<li class='{$class}'><a href='weekselect.php?week={$weekTemp}&year={$yearTemp}'>{$symbol}</a></li>";
}

for($i=0;$i<9;$i++){

	switch($i){
		case 0: printSelector(weekAction("-", 1, $year, $week), "&laquo;"); break;
		case 1: printSelector(weekAction("-", 3, $year, $week)); break;
		case 2: printSelector(weekAction("-", 2, $year, $week)); break;
		case 3: printSelector(weekAction("-", 1, $year, $week)); break;
		case 4: print"<li class='active'><span>{$week}</span></li>"; break;
		case 5: printSelector(weekAction("+", 1, $year, $week)); break;
		case 6: printSelector(weekAction("+", 2, $year, $week)); break;
		case 7: printSelector(weekAction("+", 3, $year, $week)); break;
		case 8: printSelector(weekAction("+", 1, $year, $week), "&raquo;"); break;
	}

}
print"</ul>";
?>

qeijo [24.12.2012 10:12:48]

#

Ei valmis ratkaisu, mutta:

$time = strtotime("2012W50 + 2 weeks"); //muista viikon formaatti on W01, W02, W43 jne

$vuosi  = date("Y", $time);
$viikko = date("W", $time);

/* vastaavasti */

$time = strtotime("2012W50 - 2 weeks");

$vuosi  = date("Y", $time);
$viikko = date("W", $time);

Olli [24.12.2012 10:29:53]

#

Millä lailla tuo ei ole valmis ratkaisu?

Metabolix [28.12.2012 00:49:12]

#

Olli kirjoitti:

Millä lailla tuo ei ole valmis ratkaisu?

No jos vaikka sillä tavalla, että qeijon koodi ei tulosta mitään listaa valinnoista vaan esittelee vain, miten strtotime-funktiolla ja date-funktiolla saa helpommin tulostettua eri valintoja. Näitä neuvoja soveltamalla voisit siis korvata koko weekAction-kikkailusi noilla kahdella funktiolla.

Olli [29.12.2012 16:23:06]

#

Ok, kiitoksia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta