HJÆLP php problem med datoindlæsning
Kan og vil du ikke lige fortælle mig, hvad jeg skal gøre for at få fejlen rettet i koden her:
<?php
$lige_nu = date("dmy");
$bt = "$_POST[dagsdato]";
if($bt >= $lige_nu){
$tabel[x] = "$_POST[dagsdato] \t $_POST[tidspunkt] \t $_POST[brugerId] \t \n";
echo $tabel[x];
}
else {
print "Forkert dato-indtastning.";
}
?>
Koden virker så vidt jeg har konstateret indtil nu korrekt hvis, men også kun hvis
dag i måneden er lig med eller større end dagen i dag eks: 300908 eller 310708
returnerer $tabel[x] hvorimod 241209 udskriver fejlmeldingen, hvorfor det??
Hvordan kan koden ændres, så den viser korrekt i ALLE tilfælde?
- Log in to post comments
Kommentarer7
Re: HJÆLP php problem med datoindlæsning
Skift formatet fra $_POST["dagsdato"] til "Y-m-d" og brug strtotime() istedet.
Med strtotime() og time() får du datoen i "unix time" i stedet, hvilket er datoen omregnet til sekunder siden 1970-01-01.
if (strtotime($_POST["dagsdato"]) >= time())
Re: #1
Tak for det særdeles hurtige og gode svar, du allerede har givet mig. Det med årstallet først, havde jeg slet ikke tænkt over. Men problemet er ikke fuld løst, for koden skal bruges i en allerede eksisterende ekstern database, der har været i brug nogle år, men desværre ikke virker med hensyn til automatisk at slette gamle datoer, der er indskrevet og indskrives af flere forskellige på flere forskellige eksterne og af hinanden uafhængige kontorer. Brugerne er vant til at taste det af dem ønskede tidspunkt ind som dag måned år i nævnte reæækefølge og som et 6 cifret tal som f.eks. 300708 - kan jeg på en eller anden måde undgå dit forslag til formatskifte, eller skal jeg opdele "dagsdato" strengen? Hvis jeg skal det,
kan stumperne så samles med dots som "2008"."07"."30" og være virkende på den måde?
Re: HJÆLP php problem med datoindlæsning
Som du selv er inde på, er løsningen nok at få opdelt dato strengen. Punktummer er nok ikke det rette valg - det skal vist være med bindestreger før strtotime() vil acceptere den.
Re: #3
Tak også denne gang. Jeg tror vores fælles løsning er den rette, så den vil jeg benytte.
Re #3
Koden her returnerer korrekt værdi såfremt dagsdato er tidligere eller senere
end aktuelle dagsdato (dagen i dag). Kan du fortælle mig, hvorfor logikken synes at mangle for dagen i dag?
<?php
$lige_nu = time();
$dagsdato = substr($_POST["dagsdato"],0,2);
$maaned = substr($_POST["dagsdato"],2,2);
$aar = substr($_POST["dagsdato"],4,2);
$aar = "20".$aar;
$booked_tid = $aar.$maaned.$dagsdato;
$bt = strtotime($booked_tid);
if ($bt >= $lige_nu){
$tabel[x] = "$_POST[dagsdato] \t $_POST[tidspunkt] \t $_POST[brugerId] \t \n";
echo $tabel[x];
}
else {
print "Forkert dato-indtastning.";
}
?>
Re: HJÆLP php problem med datoindlæsning
mktime() er i virkeligeheden nok bedre, da vi ellers også får et timestamp med, som vil være kl. 00:00 for $bt's vedkommende og aktuel tid for $lige_nu's. Derfor vil din if sætning fejle, hvis de to datoer er samme dag.
$lige_nu = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
Re: #6
Da time() returnerer en long, kan jeg nok nøjes med at trække 86400 fra variabelværdien, der hvor det bliver nødvendigt - det giver mig en mulighed mere.