bepaalde kleur 3 dagen voor eindatum

Status
Niet open voor verdere reacties.

exotic

Gebruiker
Lid geworden
10 jul 2007
Berichten
277
Beste,

Ik zoek een script waarbij ik een einddatum 3 dagen van te voren een kleurtje kan geven.

ik heb bijvoorbeeld het volgende al:
PHP:
  $einddatum=$aLid['einddatum'];
  $x=split("/",$einddatum);
  $y2=mktime(0,0,0,$x[1],$x[0],$x[2]);

if($y2<=$y1){
    $kleur="red";
}elseif( $y == date() ){ 
   $kleur="orange";
}else{
   $kleur="green";
}

Alle datums staan : 01-05-2009
dus als het nu 28-04-2009 zou zijn word 01-05-2009 rood oranje gekleurd..
Als het 01-05-2009 zou zijn moet deze rood zijn.

Wie o wie, Greetz
Wesley
 
Je hebt de huidige datum al in $y2
het enige wat je dan nog hoeft te doen is om in $y1 vandaag min drie dagen te zetten.
Code:
$vandaag = date("mdy"); 
$y1 = mktime (0,0,0,date("m"),date("d") - 3,date("y"));
 
Hmmm

ik heb nu dus het volgende:
PHP:
<?
$enddate=$rows['enddate'];
$y1 = mktime (0,0,0,date("d"),date("m") -3,date("y"));
$x	= split("-",$enddate);
$vandaag = date("d-m-y"); 
$y2 = mktime (0,0,0,$x[1],$x[0],$x[2]);
 
if($y2<=$y1){
    $kleur="red";
}elseif( $y == date("d-m-y") ){ 
   $kleur="orange";
}else{
   $kleur="green";
}
?>

en gebruik
PHP:
<? echo "<span style='color:$kleur;'>".$rows['enddate']."</span>";   ?>
om de kleuren te weergeven.
Nu is alles rood en niet de juist kleur?
 
Je moet in ieder geval zeker weten dat jouw $enddate is gescheiden door een -, omdat je hier mee split (in het eerste geval maakte je nl. gebruik van /)

Je maakt $y1 d.m.v.
PHP:
mktime (0,0,0,date("d"),date("m") -3,date("y"))
terwijl dit
PHP:
mktime (0,0,0,date("m"),date("d") -3,date("y"))
moet zijn

Daarnaast nog een paar dingen die me opvielen:
de variabele $vandaag maak je wel maar gebruik je niet (in het voorbeeld)
Je controleert eerst op ($y2<=$y1) en vervolgens op ($y == date("d-m-y")), maar de $y is helemaal niet gedefinieerd... Ik zou me kunnen voorstellen dat je eerst wilt controleren op ($y2=$y1), daarna op ($y2==$y1)

Gaat het nu beter?
 
Nou ik snap er helemaal niets meer van.

ik heb mijn datum alsvolgt staan:
01-02-2003

maar de kleuren krijg ik alleen in het groen?
Hmm, ze staan dus als Dag-Maand-Jaar

Mss dat jij het 1 en ander kan proberen?
 
Als ik nu de code heb
PHP:
<?php
//$enddate=$rows['enddate'];
$enddate="11-04-2009";

$y1 = mktime (0,0,0,date("m"),date("d") -3,date("y"));
$x  = split("-",$enddate);
$vandaag = date("d-m-y"); 
$y2 = mktime (0,0,0,$x[1],$x[0],$x[2]);
 
if($y2<=$y1){
    $kleur="red";
}elseif( $y == date("d-m-y") ){ 
   $kleur="orange";
}else{
   $kleur="green";
}
?>

<?php echo "<span style='color:$kleur;'>TEST</span>";   ?>

Nu heb ik de $enddate zelf aangepast. Die laat ik als test eerst op '11-04-2009' gaan, dat geeft groen. Ook '10-04-2009' en '09-04-2009' worden groen gedrukt. '08-04-2009' is echter rood, zoals verwacht.
Misschien kun je zo zien waar het verschil zit?
 
En dat klopt dus niet.

Als mijn enddate 14-04-2009 is moet het vanaf 11-04-2009 oranje worden.
alles voor 11-04-2009 groen. als het vandaag 14-04-2009 zou zijn moet deze rood gekleurd worden, de dagen er na ook.

Greetz
 
dan moet je het stuk met de $y1 en $y2 aanpassen
$y1 = vandaag - 3 dagen
$y2 = de einddatum

je controleert nu eerst of $y2 kleiner of gelijk is aan $y1
dus de einddatum ligt minimaal 3 dagen voor vandaag, zou dus groen moeten worden (staat in het voorbeeld rood)

daarna controleer je of $y vandaag is
de hele variabele $y komt niet voor, dus dat werkt sowieso niet

de rest laat je rood zien.

kortom moet je eerst kijken of $y2 kleiner is dan $y1 (groen)
daarna of $y2 groter of gelijk is aan $y1, maar kleiner dan vandaag (oranje)
anders (dus groter of gelijk aan vandaag) rood

met een beetje puzzelen en uitproberen moet het zo lukken
 
waarom niet? Zo moeilijk is het nu toch niet meer, of zie ik dan iets over het hoofd?

kijk maar weer naar mijn voorbeeld, met mijn eerdere opmerkingen erin verwerkt.
PHP:
<?php
//$enddate=$rows['enddate'];
$enddate="11-04-2009";
 
$y1 = mktime (0,0,0,date("m"),date("d") -3,date("y"));
$x  = split("-",$enddate);
$vandaag = mktime (0,0,0,date("m"),date("d") ,date("y"));
$y2 = mktime (0,0,0,$x[1],$x[0],$x[2]);
 
if($y2<$y1){
    $kleur="green";
}elseif( $y2 >= $y1 && $y2 < $vandaag ){ 
   $kleur="orange";
}else{
   $kleur="red";
}
?>
 
<?php echo "<span style='color:$kleur;'>TEST</span>";   ?>
 
waarom niet? Zo moeilijk is het nu toch niet meer, of zie ik dan iets over het hoofd?

kijk maar weer naar mijn voorbeeld, met mijn eerdere opmerkingen erin verwerkt.
PHP:
<?php
//$enddate=$rows['enddate'];
$enddate="11-04-2009";
 
$y1 = mktime (0,0,0,date("m"),date("d") -3,date("y"));
$x  = split("-",$enddate);
$vandaag = mktime (0,0,0,date("m"),date("d") ,date("y"));
$y2 = mktime (0,0,0,$x[1],$x[0],$x[2]);
 
if($y2<$y1){
    $kleur="green";
}elseif( $y2 >= $y1 && $y2 < $vandaag ){ 
   $kleur="orange";
}else{
   $kleur="red";
}
?>
 
<?php echo "<span style='color:$kleur;'>TEST</span>";   ?>

Ja zover was ik ook, maar de kleur blijft rood. ook al is de einddatum 10-07-2009.
dus die hoord groen te zijn.

btw, ik haal wel een hele query met enddate binnen...

Groeten
 
dan zou ik gaan debuggen, zet informatie neer, zodat je kunt zien waar het mis gaat.
bijvoorbeeld
PHP:
<?php
//$enddate=$rows['enddate'];
$enddate="11-04-2009";
 
$y1 = mktime (0,0,0,date("m"),date("d") -3,date("y"));
$x  = split("-",$enddate);
$vandaag = mktime (0,0,0,date("m"),date("d") ,date("y"));
$y2 = mktime (0,0,0,$x[1],$x[0],$x[2]);
 
echo("y1 (-3 dagen) = ".$y1."<BR>");
echo("y2 (enddate) = ".$y2."<BR>");
 
if($y2<$y1){
    $kleur="green";
}elseif( $y2 >= $y1 && $y2 < $vandaag ){ 
   $kleur="orange";
}else{
   $kleur="red";
}
?>
 
<?php 
	echo "<span style='color:$kleur;'>TEST</span>";   
	echo("---<BR>");
?>
Als je deze in de hele query uitvoert, zie je verschillende regels met de waardes van y1 en y2. Zo moet je kunnen zien waarom de teksten rood blijven en hierdoor dus ook wat je moet aanpassen.
 
y1 (-3 dagen) = 1239141600
y2 (enddate) = 1247176800
TEST---

y1 (-3 dagen) = 1239141600
y2 (enddate) = 1239487200
TEST---

y1 (-3 dagen) = 1239141600
y2 (enddate) = 1247176800
TEST---

btw: allemaal rood
 
Laatst bewerkt:
Waarom doe je het niet gewoon in SQL? Gewoon een boolean aanmaken die je later kunt gebruiken.
 
Probleem is dat ik niet teveel van PHP afweet en ook niet van MySQL.
dus ja.. daarom eingelijk?
 
kijk, met wat debug-gegevens kom je er wel (al had ik achteraf duidelijkere debug-gegevens moeten genereren ;))

zo moet het denk ik lukken:
PHP:
<?php
$enddate=$rows['enddate'];
 
$vandaag = mktime (0,0,0,date("m"),date("d") ,date("y"));

$x  = split("-",$enddate);
$enddate0 = mktime (0,0,0,$x[1],$x[0],$x[2]);
$enddate_min_3 = mktime (0,0,0,$x[1],$x[0]-3,$x[2]);
 
echo("$enddate0 = ".$enddate0."<BR>");
echo("$enddate_min_3 = ".$enddate_min_3."<BR>");
 
if($vandaag<$enddate_min_3){
    $kleur="green";
}elseif( $vandaag >= $enddate_min_3 && $vandaag < $enddate0 ){ 
   $kleur="orange";
}else{
   $kleur="red";
}
?>
 
<?php 
	echo "<span style='color:$kleur;'>TEST</span>";   
	echo("---<BR>");
?>
 
Juist!
Perfect!

Zou je ook kunnen uitleggen wat die debug betekende?

Greetz
 
Ik zou het allemaal even wat korter en duidelijker opschrijven. PHP heeft namelijk een heleboel handige datum/tijd functies:

PHP:
$sEnddate = "18-04-2009";
$enddate = strtotime($sEnddate);
$vandaag = strtotime("now");
$enddate_min_3 = strtotime($sEnddate." -3 days");

if($vandaag < $enddate_min_3){
	$kleur="green";
}elseif( $vandaag >= $enddate_min_3 && $vandaag < $enddate ){
	$kleur="orange";
}else{
	$kleur="red";
}

Je hoeft nu geen split meer te gebruiken. Trouwens split() is vanaf PHP 5.3 deprecated dus zou ik niet meer gebruiken. Gebruik daar voor preg_split() of explode()
 
Toch kun je het nog altijd beter in SQL doen. Met CASE en INTERVAL moet je een eidn komen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan