Avatar billede nemlig Professor
07. marts 2010 - 12:48 Der er 12 kommentarer og
2 løsninger

Omregn timestamp ved at fratrække et antal minutter

Jeg har et tidspunkt, som jeg har hentet fra MySQL.
Det står i dette format: 2010-03-07 23:52:00
Jeg ønsker så at fratrække et antal minutter, fx. 60 min. og få resultatet præsenteret uden skilletegn: 20100307225200
Jeg kunne anvende disse variabler:
$hentetTid = $row['starttid']; //Formatet er YYYY-MM-DD TT:MM.SS
$antalMin = 60;
$nyTid = $hentetTid - $antalMin; //Præsenteres uden skilletegn.
Avatar billede Slettet bruger
07. marts 2010 - 13:01 #1
Prøv at se om strtotime og date ikke kan klare ærterne.
Avatar billede nemlig Professor
07. marts 2010 - 13:20 #2
Det er jeg ikke med på - desværre.
Jeg kan måske se, at jeg kan bruge substr og mktime til at finde et Unix timestamp for derefter at fratrække antal minutter.
Men hvordan jeg så kommer tilbage til alm. datoformat ved jeg ikke.
Derefter kan jeg vel bruge "date" til at formatere korrekt.
Avatar billede Slettet bruger
07. marts 2010 - 13:27 #3
Du siger at du kan bruge substr og mktime til at lave et Unix timestamp. Du kommer tilbage til dit datoformat, som du selv siger, ved at bruge date til at formatere det korrekt:

$dato = date('Y-m-d H:i:s', $timestamp)
07. marts 2010 - 13:33 #4
Denne kode virkede paa mit system.  Jeg fik denne udskrift:


1268005920
1268002320
20100307225200

<?
$a = strtotime('2010-03-07 23:52:00');
echo $a . "<br/>";
$a = $a - 3600;
echo $a . "<br/>";
$b = date('YmdHis', $a);
echo $b . "<br/>";
?>
Avatar billede nemlig Professor
07. marts 2010 - 13:37 #5
OK, men kan du se, hvad jeg gør forkert i denne kode:
Jeg skal jo gerne ende på samme tidspunkt, da jeg først konverterer til Unix og derefter alm. format.
Men der er næste 1 år til forskel!

<?php

$dato1 = '2010-14-03 15:37:58';

$datoDag = substr($dato1,8,2);
$datoMd = substr($dato1,5,2);
$datoAar = substr($dato1,0,4);
$datoTT = substr($dato1,11,2);
$datoMM = substr($dato1,14,2);
$datoSS = substr($dato1,17,2);

$timestamp = mktime($datoTT,$datoMM,$datoSS,$datoMd,$datoDag,$datoAar);


echo $timestamp.'<br>';
echo $datoDag.'<br>';
echo $datoMd.'<br>';
echo $datoAar.'<br>';
echo $datoTT.'<br>';
echo $datoMM.'<br>';
echo $datoSS.'<br>';

echo date('YmdHis', $timestamp)
?>
07. marts 2010 - 13:42 #6
Jeg staar og skal afsted, jeg skal kikke om cirka to timer (hvis det saa stadig er aktuelt.)

Men jeg mener at min kode, startende med den vaerdi du opgav i det oprindelige spoergsmaal, giver det forventede slutresultat.  Er det korrekt?  Hvis saa, hvorfor foretraekker du saa den meget laengere kode?
Avatar billede nemlig Professor
07. marts 2010 - 13:46 #7
#6 Det er en fin kode, som virker, når datoen er indtastet direkte:

$a = strtotime('2010-03-07 23:52:00');

Hvorfor kan jeg ikke få det til at virke med:

$dato = '2010-03-07 23:52:00';
$a = strtotime($dato);
Avatar billede nemlig Professor
07. marts 2010 - 13:49 #8
Sorry - det er mig, som har angivet en helt forkert dato. Se første linje i min kode under #5.
Mig bekendt har vi ikke 14 måneder.

Så virker begge løsninger.
Tak for bidragene og send venligst et svar begge 2.
Avatar billede Slettet bruger
07. marts 2010 - 13:50 #9
<?php

$dato1 = '2010-14-03 15:37:58';

$datoDag = substr($dato1,8,2);
$datoMd = substr($dato1,5,2);
$datoAar = substr($dato1,0,4);
$datoTT = substr($dato1,11,2);
$datoMM = substr($dato1,14,2);
$datoSS = substr($dato1,17,2);

$timestamp = mktime($datoTT,$datoMM,$datoSS,$datoMd,$datoDag,$datoAar);


echo $timestamp.'<br>';
echo $datoDag.'<br>';
echo $datoMd.'<br>';
echo $datoAar.'<br>';
echo $datoTT.'<br>';
echo $datoMM.'<br>';
echo $datoSS.'<br>';

echo date('YmdHis', $timestamp)
?>


Januar, februar, marts, april, maj, juni, juli, august, september, oktober, november, december...
Avatar billede Slettet bruger
07. marts 2010 - 13:51 #10
Nåh, mens jeg skrev månederne ned kom i frem til svaret :)

Desuden, brug heller strtotime. Det er en meget mere effektiv løsning end alt the cut and paste.
07. marts 2010 - 15:09 #11
Svar.
Avatar billede coderdk Praktikant
08. marts 2010 - 02:40 #12
I MySQL:

SELECT DATE_ADD(dato_felt,INTERVAL -60 MINUTE) AS NyTid FROM dintabel

- Så er den i $row['NyTid'] :)
Avatar billede nemlig Professor
08. marts 2010 - 08:37 #13
Åhh ja - også en mulighed. Og det er vel den korteste kode, idet jeg blot skal have datoen formatteret med date().
Tak for bidraget.
Avatar billede coderdk Praktikant
08. marts 2010 - 09:22 #14
Hvilket du også kan i SQL:

SELECT DATE_FORMAT(DATE_ADD(dato_felt,INTERVAL -60 MINUTE), '%e/%c-%Y %k:%i') AS NyTid FROM dintabel

:)
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