Avatar billede Asger Carlsen Nybegynder
11. august 2011 - 16:03 Der er 14 kommentarer og
2 løsninger

Timestamp + 15 min

Et sikkert simpelt spørgsmål, jeg har måtte opgive sel at finde en løsning på.

Jeg har en variabel tid i et formatet 09:00:00. Hertil vil jeg gerne have lagt et kvarter til. Så variablen kommer til at hedder 09:15:00. Hvordan gøres det lige på en smart og enkel måde?
Avatar billede olebole Juniormester
11. august 2011 - 16:30 #1
<ole>

Hvor kommer tidspunktet/variablen fra? Er det muligt at bruge et lidt mere håndterbart format - f.eks. et timestamp?

/mvh
</bole>
Avatar billede Asger Carlsen Nybegynder
11. august 2011 - 16:44 #2
Det skal bruges i MySQL hvor cellen har formatet TIME()
Avatar billede mediman Nybegynder
11. august 2011 - 16:47 #3
Så lægger du bare 15 minutter til.

$tid = time() + 15*60;
Avatar billede majbom Novice
11. august 2011 - 16:55 #4
eller når du henter det fra din db:

SELECT ADDTIME(din_tid, '00:15:00') AS tid FROM tidstabel
Avatar billede olebole Juniormester
11. august 2011 - 17:01 #5
- og der er splazz' forslag klart at foretrække
Avatar billede mediman Nybegynder
11. august 2011 - 17:18 #6
Hvorfor er splazz' forslag klart at foretrække?

jeg kunne måske lære noget her ...
Avatar billede olebole Juniormester
11. august 2011 - 17:23 #7
Fordi det næsten altid er bedre performende at lade MySQL udføre beregninger/sammenligninger/handlinger, fremfor at lade PHP gøre det på resultatet
Avatar billede Asger Carlsen Nybegynder
11. august 2011 - 17:40 #8
Jeg kan godt se det smarte i Splazz forslag. Den lille hage der er ved det, er at jeg skal bruge det i en lidt større sammenhæng. Hvor jeg har en tid fx 09:00:00, hvor jeg skal ligge 15 min til, indtil jeg rammen en anden given tid. fx 10:15:00. Det er selvfølgelig stadig muligt, men der kommer bare en hulens masse data udtræk. Kan man ikke lave noget alla:

$tid = 09:00:00;
$ny_tid = $tid + 15 min

$ny_tid = 09:15:00

?
Avatar billede mediman Nybegynder
11. august 2011 - 17:56 #9
Jo, se #3

Du skal skelne mellem værdien af et timestamp, og så en formatteret visning af det.

Først skal din $tid indeholde et UNIX timestamp. 09:00:00 er en formatteret string af timestampet. Det er selve timestampet du skal lægge det relevante antal sekunder til, her 15*60, og derefter formattere det til en evt. udskrift.

Værdien af timestampet er et antal sekunder - grundlaget er det antal sekunder der er gået siden 1. januar 1970 00:00:00 GMT

Formatet af timestampet er den måde det vises på, f.eks. 09:00:00
Avatar billede majbom Novice
11. august 2011 - 17:58 #10
du kan jo hente 17 forskellige tider ud i samme udtræk:

SELECT ADDTIME(din_tid, '00:15:00') AS tid, ADDTIME(din_tid, '01:00:00') AS tid1, ADDTIME(din_tid, '01:15:00') AS tid2 FROM tidstabel


så får du:

tid: 09:15:00
tid1: 10:00:00
tid2: 10:15:00


hvis tiden er 9 i tabellen...
Avatar billede Asger Carlsen Nybegynder
11. august 2011 - 18:10 #11
#9 => Hvordan konverterer jeg mellem de 2? For hvis det er måden jeg gør det på. Skal jeg vel have konverteret mit format til en værdi, så lægge de 15 min til, for at formatere det tilbage til et format?

#10 => Det er selvfølgelig rigtigt nok. Jeg skal have fat i et tidspunkt af gangen. Det skal så sammen ligenes med et andet tidspunkt. Er de ens, sker en ting og scriptet stopper. Er de ikke ens, sker der en ting, og der skal så hentes endnu en tid, bare yderligere 15 min. senere. Denne løkke skal så fortsætte til de to tider matcher.
Avatar billede mediman Nybegynder
11. august 2011 - 18:22 #12
Du skal have fat i den værdi der er grundlag for den formatterede visning. Den laver du så dine beregninger på inden du formatterer den.

Hvis $tid er 09:00:00 så er det en string. Hvad sker der hvis du lægger 15*60 til en string?

$tid skal være en int. Så kan du lægge til og trække fra alt hvad du vil, inden du formatterer den til visning med date()

Date formatet er "string date ( string $format [, int $timestamp = time() ] )"

1. parameter er formattetingen, 2. parameter er $tid

Se http://www.php.net/manual/en/function.date.php
Avatar billede Asger Carlsen Nybegynder
11. august 2011 - 18:29 #13
Okay, har leget lidt med begge løsninger og har fået det til at virke, i hvert fald princippet. Jeg må kigge lidt videre og se hvad der er mest eget lidt i det her tilfælde.

Jeg siger mange tak for hjælpen, hvis I begge smider et svar(mediman/splazz) må I dele point.
Avatar billede mediman Nybegynder
11. august 2011 - 18:32 #14
svar
Avatar billede majbom Novice
11. august 2011 - 18:58 #15
kommer her - held og lykke med projektet :)
Avatar billede majbom Novice
11. august 2011 - 19:25 #16
tfp :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester