Dagen i går.

Tags:    php

<< < 12 > >>
Dette burde ikke være svært at gøre, men jeg kan ikke regne ud hvordan det kan gøres på den lette måde.

Hvad jeg har brug for er 4 variabler:
dag: dd
måned: mm
år1: yy
år2: yyyy

Problemet er er disse variabler skal være sat således at de står til dagen i går.
Man kan jo ikke bare sige date('d')-1 eller det kan man godt, men hvis date('d') == 1 får det invirkning på måneden og ydermere skal skal dagen så sættes til enten 28, 29, 30, eller 31 afhængig af hvilken måned der er tale om og om det er skud år. I sidste instans kan det også få invirkning på året.

Jeg kunne godt løse dette problem med et par hundrede liniers php kode, men jeg gider ikke, og der må også være en lettere løsning, så jeg sætter 200 up på spil i håbet om at der er en der gider at gøre det for mig.

På forhånd tak.



12 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 7 karma
Sorter efter stemmer Sorter efter dato
For at få det afklaret har jeg målt begge funktioners gennemsnits udregnings hastighed over 100 forsøg og resultaterne er som jeg forventede:

date("d-m-y-Y",time()-86400) - 4 millisekunder
date('Y-m-d', strtotime('-1 day')) - 8 millisekunder

Altså er "min" version dobbelt så hurtig og må derfor være mindre ressource krævende. I er velkommne til selv at teste det.

Resultatet undrer mig ikke.
Vi benytter begge "date()" funktionen, så er forskellen altså "strtotime('-1 day')" og "time()-86400"

time() er en simpel funktion og kræver ingen decideret udregning.
strtotime() er en avanceret funktion som genkender et tekst format. altså kræver den at der foretages nogen match funktioner.



det her burde være igår:
$yeasterday = time() - ( 24 * 60 * 60);





eller bruge strtotime("-1 day") :) Det er åndssvagt, men det virker. hehe...

Fold kodeboks ind/udKode 




Helt simpelt:


$yday = explode("-",date("d-m-y-Y",time()-86400));
$dag = $yday[0];
$måned = $yday[1];
$år1 = $yday[2];
$år2 = $yday[3];
echo "Dag: " . $dag . " Måned: " . $måned . " År1: " . $år1 . " År2: " . $år2;


Forklaring:

time() - giver klokken lige nu i UNIX timestamp

-86400 - Vi trækker antal sekunder på en dag fra (24 * 60 * 60)

Nu har vi klokkeslættet i går. Det sætter vi ind i:

date("d-m-y-Y", )

Som laver datoen i det ønskede format.

Så bruger vi explode funktionen til at "skille" dataene fra hinanden. De bliver gemt i et array ($yday) som vi så kan hive dataene ud fra.

Håber det var hjælp nok, ellers skriver du bare igen :)



Indlæg senest redigeret d. 08.03.2008 12:27 af Bruger #11914
Jeg må indrømme at jeg har problemer med at se hvor time() kommer ind i billede, men så længe det virker kan jeg jo være ligeglad. Jeg prøver lige thomas udlæg, ser mest proffesionelt ud.

edit:
Det ser ud til at virke så det er 200up til Thomas ;)



Indlæg senest redigeret d. 08.03.2008 16:24 af Bruger #4414
Felix, jeg kan lige prøve kort:

time() returnerer klokken LIGE NU. Den er i dette sekund: 1204996495

Så trækker jeg simpelthen en dags sekunder fra altså 86400 sekunder som kommer af (24 timer * 60 minutter * 60 sekunder)

Så får jeg 1204910095. Dem laver jeg så om til noget vi rent faktisk kan bruge med date().



så du bruger time til at generere en dato? never min, bare det virker.



Ja, time() generere klokken lige nu. Så trækker jeg en dag fra (86400 sekunder) og så må jeg logisk nok have dagen i går.



Lige for en god ordensskyld. Funktionen time() generer ikke klokken lige nu. Den er et udtryk for de antal sekunder der er gået siden den 1. januar 1970.

Det vil sige, hvis du bruger time() og trækker 86400 sekunder fra, så får du det antal sekunder der var gået siden den 1. januar 1970 på samme tidspunkt præcist 24 timer siden.

Funktionen date i PHP udtrykker datoen ud fra antal sekunder siden den 1. januar 1970.

function date($format, $unixseconds = time());

Sådan ser den sikkert ud i PHP5 core. Desuden så er date('Y-m-d', strtotime('-1 day')); langt det mest professionelle at gøre i denne situation. Jo mindre kode du benytter dig af, jo bedre.



Indlæg senest redigeret d. 10.03.2008 17:14 af Bruger #4758
Jo mindre kode du benytter dig af, jo bedre.

Jeg er måske ikke en super programmør, men dette er ikke nødvendigvis sandt. For at tage et eksempel tag et kig på dette:
Fold kodeboks ind/udKode 

Dette er naturligvis skevet i C og er formentlig noget af det mest geniale kode der nogensinde er skrevet, problemet er bare at der ikke er nogen der forstår det.



<< < 12 > >>
t