4588pkdkrikue5c Skrevet 5. juli 2009 Del Skrevet 5. juli 2009 (endret) Hei, Eg slit litt med logikken her, så eg treng deira hjelp for å samle tankane. Eg skal rekne meg fram til ein dato, i dager slik at brukeren kan få sjå kor lenge det er igjen til eit element utløp. Det som skjer er at ein brukar postar inn opplysninger, om la oss seie matvarer. Datoen idag blir automatisk satt som startdato, og ein må angi ein månedsintervall på kor lenge varen vil vare før ein må kaste den. Så eg sitt altså med når produkt blei posta i databasen, samt kor mange månadar det held. Korleis kan eg utfrå det rekne meg fram til kor lenge produktet har igjen før det må kastes i dager med PHP basert på at eg veit kva tid produktet vart kjøpt, og kor lenge det held i måneder. Beklager dårleg forklaring. Men eg må nesten skrive det slik for at eg skal forstå det sjølve. Eg må vel nytte mktime, men korleis? Antall dager skal ikkje reknes ut å lagres i database, eg vil at tenaren skal rekne det ut kvar gong produktene vises basert på kjøpsdato óg månadsintervall. Klarer dei å hjelpe meg? Eg forstår ikkje heilt sjølv ka eg driv med, men såg for meg å bruke mktime på nokon måte? Somsagt skal resultatet vere "Produktet ditt har x antall dager igjen". Takk for all hjelp! Endret 5. juli 2009 av steffenz Lenke til kommentar
LoS Skrevet 5. juli 2009 Del Skrevet 5. juli 2009 (endret) Hei på deg der! Som ingen vet så har MySQL også en helt grei mengde med datofunksjoner. Siden du nevner database så går jeg ut i fra at du bruker MySQL. Enkleste måten å gjøre dette på da er egentlig noe så enkelt som SELECT DATEDIFF(datokolonne, NOW()) AS expires FROM tabell Mer om MySQL sine datofunksjoner: http://dev.mysql.com/doc/refman/5.1/en/dat...-functions.html Endret 5. juli 2009 av LoS Lenke til kommentar
4588pkdkrikue5c Skrevet 6. juli 2009 Forfatter Del Skrevet 6. juli 2009 (endret) Men korleis skriv eg dette ut då? Har følgende i PHP koden no: $sqldato = "SELECT DATEDIFF(radisql, NOW()) AS expires FROM tabellen"; $datoresultat = mysql_query($sqldato, $tilkobling); $datoigjen = mysql_fetch_array($datoresultat); Men kva no? Endret 6. juli 2009 av steffenz Lenke til kommentar
LoS Skrevet 6. juli 2009 Del Skrevet 6. juli 2009 DATEDIFF(radisql, NOW()) AS expires Når du bruker 'as' så navngir du utregningen, i dette tilfellet, til 'expires'. Altså: $datoigjen['expires'] Lenke til kommentar
4588pkdkrikue5c Skrevet 6. juli 2009 Forfatter Del Skrevet 6. juli 2009 Eg slit litt med å forstå no. Det kjem berre opp -2189.. Kor fanger eg opp månedsintervallet frå som eg nemne i førstepost? Forstår ikkje dette heilt, beklager.. Lenke til kommentar
LoS Skrevet 6. juli 2009 Del Skrevet 6. juli 2009 Hvordan lagrer du intervallet i databasen da? Lenke til kommentar
4588pkdkrikue5c Skrevet 6. juli 2009 Forfatter Del Skrevet 6. juli 2009 I ei rad eg har tenkt å kalle for intervall. Intervallet er i månedar (altså 12 vil seie eit år).. Lenke til kommentar
LoS Skrevet 6. juli 2009 Del Skrevet 6. juli 2009 Ok, da begynner vi å snakke. Spørringen blir kanskje litt (unødvendig?) komplisert. SELECT DATEDIFF(DATE_ADD(NOW(), INTERVAL radisql MONTH, NOW()) AS expires FROM tabellen Forøvrig utestet, aldri prøvd å hente intervaltiden fra sql før. Lenke til kommentar
4588pkdkrikue5c Skrevet 6. juli 2009 Forfatter Del Skrevet 6. juli 2009 Den får eg ikkje til å fungere.. Men eg må vel strengt tatt få med datoen eg har i databasen óg ein plass? I staden for DATE_ADD, eller? Prøvde lit sjølve utan resultat. Tusen takk for du gidd å ta deg tid til dette, no lærer eg noko heilt nytt! Lenke til kommentar
LoS Skrevet 6. juli 2009 Del Skrevet 6. juli 2009 Hvis du skriver inn datoen det vil gå ut på i databasen i typen DATE så skal den første spørringa fungere. Bruker du derimot unix timestamp, så må du konvertere i hver spørring med funksjonen FROM_UNIXTIME, hvis du kun bruker et tall som f.eks 12 i en kolonne så må du bruke DATE_ADD. Har aldri selv prøvd på sistenevnte så det er mulig det ikke er mulig. Finnes sikkert en snedig løsning i PHP og, men MySQL har så mange fine ubrukte datofunksjoner at å finne opp hjulet på nytt virker unødvendig. Hjelper sykt mye hvis du kan poste databaseoppsettet ditt. Lenke til kommentar
4588pkdkrikue5c Skrevet 6. juli 2009 Forfatter Del Skrevet 6. juli 2009 (endret) Har ikkje så utruleg lyst å poste heile databasen her, men datoen eg sett inn vart laga av NOW(); kommandoen når innlegget vart posta.. Kva treng du vite egentleg så kan eg kome med det. Redigert: Sjå vedlegg. Viser tabellen. Endret 6. juli 2009 av steffenz Lenke til kommentar
LoS Skrevet 6. juli 2009 Del Skrevet 6. juli 2009 (endret) Det fungerer jo, hadde bare glemt en parantes. SELECT DATEDIFF(DATE_ADD(NOW(), INTERVAL intervall MONTH), NOW()) AS expires FROM tid Og hvis du vil bruke datoen i databasen for når det ble lagt til så bruker du bare SELECT DATEDIFF(DATE_ADD(forrige, INTERVAL intervall MONTH), NOW()) AS expires FROM tid Endret 6. juli 2009 av LoS Lenke til kommentar
4588pkdkrikue5c Skrevet 6. juli 2009 Forfatter Del Skrevet 6. juli 2009 (endret) Det står framleis -1823 dager.. Det kan jo ikkje stemme då intervallet skal vere 12 månader frå idag (då måtte eg jo fått 356?) Kva kan vere galt? Datoen i databasen (forrige) fekk eg generert frå koden NOW(); til SQL. Redigert: Det var berre ein feil i syntaksen på dei tidligare tilagte innlegga i databasen. No fungerer det optimalt. Takk for hjelpa, eg ante verkeleg ikkje at MySQL kunne teke seg av slike matematiske operasjonar. Mykje enklare enn i PHP. Endret 6. juli 2009 av steffenz Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå