/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Konvertere sekunder til læsbart format
Fra : Jimmy


Dato : 20-12-04 13:33

Hej

Jeg har to Epoch'er i min database - start og sluttidspunkt.
Jeg skal have parset tiden imellem dem som læsbart format, e.g. 2d 5h 10m.

Jeg har ledt i manualen og det ser ikke ud som som der er en funktion der
kan klare opgaven, når den får sekunder som input.

Skulle jeg løse den i hånden ville jeg først dividere med antal sekunder på
et år og derved have antal hele år, hvorefter dette blev trukket fra
sekunderne.
Derefter ville jeg finde ud af hvor mange dage der var indeholdt i dette og
konvertere disse til måneder ved at dividere med 30.

Og så fremdeles.

Alt andet lige en lidt omstændelig procedure, som sikkert kan simplificeres.

Nogen der kender til en funktion i php eller et script som kan klare
opgaven?

Mvh
Jimmy



 
 
Ukendt (20-12-2004)
Kommentar
Fra : Ukendt


Dato : 20-12-04 13:42

Jimmy wrote:
> Jeg har to Epoch'er i min database - start og sluttidspunkt.
> Jeg skal have parset tiden imellem dem som læsbart format, e.g. 2d 5h 10m.
>
> Jeg har ledt i manualen og det ser ikke ud som som der er en funktion der
> kan klare opgaven, når den får sekunder som input.
[snip]
> Nogen der kender til en funktion i php eller et script som kan klare
> opgaven?

Prøv at læse her
http://dk.php.net/manual/da/php/function.date.php

--
Mvh
Martin Møller Bæk
www.yavi.dk

Ukendt (20-12-2004)
Kommentar
Fra : Ukendt


Dato : 20-12-04 13:44

Martin Møller Bæk wrote:
> Prøv at læse her
> http://dk.php.net/manual/da/php/function.date.php

Glemte lige at sige, at du selvfølgelig skal
trække de to timestamps fra hinanden først
og så bruge date(...) på resultatet.

--
Mvh
Martin Møller Bæk
www.yavi.dk

Jimmy (20-12-2004)
Kommentar
Fra : Jimmy


Dato : 20-12-04 14:03


"Martin Møller Bæk" <martin@fjerndetteheraflame.dk> wrote in message
news:cq6hf7$md3$2@gnd.k-net.dk...
> Martin Møller Bæk wrote:
> > Prøv at læse her
> > http://dk.php.net/manual/da/php/function.date.php
>
> Glemte lige at sige, at du selvfølgelig skal
> trække de to timestamps fra hinanden først
> og så bruge date(...) på resultatet.

Hej Martin

Nu har jeg set lidt på den, men den ser ikke ud som om den er glad for at få
et input i sekunder.

Det input den får er f.eks. 70, hvilket er 1 minut og 10 sekunder.

Hvordan vil du få den til at skrive det?

mvh
Jimmy



Ukendt (20-12-2004)
Kommentar
Fra : Ukendt


Dato : 20-12-04 14:18

Jimmy wrote:
> Nu har jeg set lidt på den, men den ser ikke ud som om den er glad for at få
> et input i sekunder.
>
> Det input den får er f.eks. 70, hvilket er 1 minut og 10 sekunder.
>
> Hvordan vil du få den til at skrive det?

Første format i date(..) funktionen er formatet.
Format-koderne står på den nævnte side.

Hvis du vil udskrive f.eks. minutter og sekunder
kan du bruge date("j s", 70);

Outputtet vil være "01 10". Du kan også skille
det ad som f.eks.

$totalSecs = 70;

$min = date("j", $totalSecs);
$sec = date("s", $totalSecs);

.....

Bemærk at du ikke kan bruge det, hvis forskellen i sekunder
er mere end en måned, da månederne varierer i længe. Men
så lang tid, det er dage, timer, minutter og sekunder, så
fungerer det fint.

--
Mvh
Martin Møller Bæk
www.yavi.dk

Ukendt (20-12-2004)
Kommentar
Fra : Ukendt


Dato : 20-12-04 14:19

Martin Møller Bæk wrote:
> Første format i date(..) funktionen er formatet.

Her skulle have stået "første argument..."
Anden argument er tiden i sekunder.

--
Mvh
Martin

Jimmy (20-12-2004)
Kommentar
Fra : Jimmy


Dato : 20-12-04 14:24


"Martin Møller Bæk" <martin@fjerndetteheraflame.dk> wrote in message
news:cq6jdf$mpp$1@gnd.k-net.dk...

> $totalSecs = 70;
>
> $min = date("j", $totalSecs);
> $sec = date("s", $totalSecs);


Ahh NU er jeg med


> Bemærk at du ikke kan bruge det, hvis forskellen i sekunder
> er mere end en måned, da månederne varierer i længe. Men
> så lang tid, det er dage, timer, minutter og sekunder, så
> fungerer det fint.

Jeg tror heller ikke jeg kommer over måneder.

Tusind tak for hjælpen.

Mvh
Jimmy



Jimmy (20-12-2004)
Kommentar
Fra : Jimmy


Dato : 20-12-04 14:31


"Jimmy" <bla@bla.bla> wrote in message
news:41c6d27b$0$74684$14726298@news.sunsite.dk...
>
> "Martin Møller Bæk" <martin@fjerndetteheraflame.dk> wrote in message
> news:cq6jdf$mpp$1@gnd.k-net.dk...
>
> > $totalSecs = 70;
> >
> > $min = date("j", $totalSecs);
> > $sec = date("s", $totalSecs);
>
>
> Ahh NU er jeg med

Og det er jeg så nok ikke alligevel:

$totalSecs = 120;

$min = date("j", $totalSecs);
$sec = date("s", $totalSecs);

echo $min ."-". $sec ."<br>";

Den burde skrive 2-00, men den skriver 1-00.

Hvis totalSecs er 50 skriver den 1-50.

Er det mig der har misforstået noget?

Mvh
Jimmy



Ukendt (20-12-2004)
Kommentar
Fra : Ukendt


Dato : 20-12-04 14:41

Jimmy wrote:
> Og det er jeg så nok ikke alligevel:
>
> $totalSecs = 120;
>
> $min = date("j", $totalSecs);
> $sec = date("s", $totalSecs);
>
> echo $min ."-". $sec ."<br>";
>
> Den burde skrive 2-00, men den skriver 1-00.
>
> Hvis totalSecs er 50 skriver den 1-50.
>
> Er det mig der har misforstået noget?

Nej, det er mig, der har skrevet forkert.
Der skal bruges "i":

$min = date("i", $totalSecs);

Så virker det. Beklager fejlen.

Iøvrigt vil $min og $sec altid have
to decimaler. F.eks. "02". Det kan
du komme over, ved at skrive:

$min = date("j", $totalSecs) + 0;

--
Mvh
Martin Møller Bæk
www.yavi.dk

Jimmy (20-12-2004)
Kommentar
Fra : Jimmy


Dato : 20-12-04 14:54


"Martin Møller Bæk" <martin@fjerndetteheraflame.dk> wrote in message
news:cq6kpe$n1g$1@gnd.k-net.dk...
> Jimmy wrote:
> > Og det er jeg så nok ikke alligevel:
> >
> > $totalSecs = 120;
> >
> > $min = date("j", $totalSecs);
> > $sec = date("s", $totalSecs);
> >
> > echo $min ."-". $sec ."<br>";
> >
> > Den burde skrive 2-00, men den skriver 1-00.
> >
> > Hvis totalSecs er 50 skriver den 1-50.
> >
> > Er det mig der har misforstået noget?
>
> Nej, det er mig, der har skrevet forkert.
> Der skal bruges "i":
>
> $min = date("i", $totalSecs);
>
> Så virker det. Beklager fejlen.

Jeg burde selv have fanget det.

Jeg har fortsat problemer
Her er scriptet:

<?php

$Timestamp = 60 * 60 * 24;

$Days = date ("d", $Timestamp);
$Hours = date ("H", $Timestamp);
$Minutes = date ("i", $Timestamp);
$Seconds = date ("s", $Timestamp);

echo "Timestamp: ". $Timestamp ."<br><br>";
echo "Days: ". $Days ."<br>";
echo "Hours: ". $Hours ."<br>";
echo "Minutes: ". $Minutes ."<br>";
echo "Seconds: ". $Seconds ."<br>";

?>


Her er output:

Timestamp: 86400

Days: 02
Hours: 01
Minutes: 00
Seconds: 00


Jeg undrer mig over antal dage og timer.
Giver man den 60 * 60 * 5 får man:

Timestamp: 18000

Days: 01
Hours: 06
Minutes: 00
Seconds: 00


Hvis jeg ikke tager meget fejl kan date() ikke bruges til at finde dage med.
Hvorfor den giver 6 ud for timer er mig så en gåde, som jeg håber du kan
løse?

Sjovere er 5 timer minus et sekund:


Timestamp: 17999

Days: 01
Hours: 05
Minutes: 59
Seconds: 59

Jeg er helt tabt, men overser vel et eller andet simpelt?

Mvh
Jimmy


>
> Iøvrigt vil $min og $sec altid have
> to decimaler. F.eks. "02". Det kan
> du komme over, ved at skrive:
>
> $min = date("j", $totalSecs) + 0;
>
> --
> Mvh
> Martin Møller Bæk
> www.yavi.dk



Ukendt (20-12-2004)
Kommentar
Fra : Ukendt


Dato : 20-12-04 15:37

Jimmy wrote:
> Jeg har fortsat problemer
> Her er scriptet:
> <?php
> $Timestamp = 60 * 60 * 24;
>
> $Days = date ("d", $Timestamp);
> $Hours = date ("H", $Timestamp);
> $Minutes = date ("i", $Timestamp);
> $Seconds = date ("s", $Timestamp);
>
> echo "Timestamp: ". $Timestamp ."<br><br>";
> echo "Days: ". $Days ."<br>";
> echo "Hours: ". $Hours ."<br>";
> echo "Minutes: ". $Minutes ."<br>";
> echo "Seconds: ". $Seconds ."<br>";
>
> Her er output:
>
> Timestamp: 86400
>
> Days: 02
> Hours: 01
> Minutes: 00
> Seconds: 00
>
>
> Jeg undrer mig over antal dage og timer.

Det må skyldes, at "tid 0" svarer til
"1 dag og 1 time."
Prøv selve at bruge $Timestamp = 0;
Så det må du trække fra.

Jeg jeg indrømmer det gerne.
Det er ikke så smart.

--
Mvh
Martin Møller Bæk
www.yavi.dk

Per Thomsen (20-12-2004)
Kommentar
Fra : Per Thomsen


Dato : 20-12-04 17:52

Jimmy wrote:

> "Martin Møller Bæk" <martin@fjerndetteheraflame.dk> wrote in message
> news:cq6kpe$n1g$1@gnd.k-net.dk...
[klip]
>
> Jeg har fortsat problemer
> Her er scriptet:
>
> <?php
>
> $Timestamp = 60 * 60 * 24;
>
> $Days = date ("d", $Timestamp);
> $Hours = date ("H", $Timestamp);
> $Minutes = date ("i", $Timestamp);
> $Seconds = date ("s", $Timestamp);
>
> echo "Timestamp: ". $Timestamp ."<br><br>";
> echo "Days: ". $Days ."<br>";
> echo "Hours: ". $Hours ."<br>";
> echo "Minutes: ". $Minutes ."<br>";
> echo "Seconds: ". $Seconds ."<br>";
>
> ?>
>
>
> Her er output:
>
> Timestamp: 86400
>
> Days: 02
> Hours: 01
> Minutes: 00
> Seconds: 00
>
>
> Jeg undrer mig over antal dage og timer.
> Giver man den 60 * 60 * 5 får man:
>
> Timestamp: 18000
>
> Days: 01
> Hours: 06
> Minutes: 00
> Seconds: 00
>

Umiddelbart vil jeg mene at timestamp'et 0 er UNIX epoch time
(1970-01-01 00:00:00).
Det er derfor du får en dag mere end du forventer, for der er jo ikke
noget der hedder den 0. januar :)

Prøv at bruge 'z' til days i stedet for, så for du 'Day of the year'
(0-365) og ikke 'Day of the month' (1-31).

Din ekstra time gætter jeg på er fordi din server har timezone sat til
EST +0100. Så bliver 0-punktet for timestamp jo pludeslig til:
1970-01-01 01:00:00
og derfår du den ekstra time på.
Måske kan du løse det ved at lave en setlocale, inden du kalder time

$curLocale = setlocale(LC_TIME, 0);
setlocale(LC_TIME, 'en_EN');// Her må du selv finde det rigtige locale
$Days = date('z', $Timestamp);
$Hours = date('H', $Timestamp);
$Minuts = date('i', $Timestamp);
$Seconds = date('s', $Timestamp);
setlocale(LC_TIME, $curLocale);

men ellers er det da en funktion der er til at håndtere, at konvertere
et antal sekunder til dage, timer, minutter og sekunder:

function secs2DaysHoursMinsSecs( $secs ) {
$days = floor( $secs / (60*60*24) );
$remainder = ( $secs % (60*60*24) );
$hours = floor( $remainder / (60*60) );
$remainder = ( $remainder % (60*60) );
$minutes = floor( $remainder / (60) );
$seconds = $remainder % 60;
return array($days, $hours, $minutes, $seconds);
}

list($Days,$Hours,$Minutes,$Seconds)=secs2DaysHoursMinsSecs($Timestamp);

MVH Per Thomsen,
http://www.pert.dk/



Jimmy (21-12-2004)
Kommentar
Fra : Jimmy


Dato : 21-12-04 08:44


"Per Thomsen" <pert@pert.dk> wrote in message
news:41c70322$0$74680$14726298@news.sunsite.dk...
> Jimmy wrote:
>

> Prøv at bruge 'z' til days i stedet for, så for du 'Day of the year'
> (0-365) og ikke 'Day of the month' (1-31).

Den virkede. Tak


> Måske kan du løse det ved at lave en setlocale, inden du kalder time
>
> $curLocale = setlocale(LC_TIME, 0);
> setlocale(LC_TIME, 'en_EN');// Her må du selv finde det rigtige locale

Prøvede med da_DK og da_DK.iso8859-1 uden held.
Serveren adlyder ikke min .htaccess, så det kan være at setlocale heller
ikke adlydes.


> men ellers er det da en funktion der er til at håndtere, at konvertere
> et antal sekunder til dage, timer, minutter og sekunder:
>
> function secs2DaysHoursMinsSecs( $secs ) {

Lækkert! Den virker perfekt. Mange tak for hjælpen.

Mvh
Jimmy



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste