/ 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
Forskel på 2 tidspunkter
Fra : Ole Gaarde Kristense~


Dato : 18-10-09 18:25

Hej gruppe

Jeg har nogle data om en vagt der er angivet med
startdato, starttidspunkt, sluttidspunkt
Eksempel 12-05-2009 16:01 23:51
Inden de data ryger i en database skal jeg have lavet dem om til
datetime-format, og jeg skal beregnes vagtens længde.
I ovenstående eksempel kan jeg gennemskue hvordan det skal gøres, fordi
datoen "passer" til begge tidspunkter.
Problemet opstår hvis vi passerer midnat
Variablene vil så være 13-05-2009 17:11 01:11
Jeg kan ikke gennemskue hvordan jeg logisk skal besluttet at 01:11 hører til
14-05-2009
Det skal nævnes, at hvis vi ryger over midnat er det altid "kun" til dagen
efter - så der skal ikke tages højde for om der er flere døgn imellem.
Nogen gode ideer?

--
Med venlig hilsen
Ole Gaarde Kristensen





 
 
Gert Krabsen (18-10-2009)
Kommentar
Fra : Gert Krabsen


Dato : 18-10-09 18:54

Ole Gaarde Kristensen skrev:
> Hej gruppe
>
> Jeg har nogle data om en vagt der er angivet med
> startdato, starttidspunkt, sluttidspunkt
> Eksempel 12-05-2009 16:01 23:51
> Inden de data ryger i en database skal jeg have lavet dem om til
> datetime-format, og jeg skal beregnes vagtens længde.
> I ovenstående eksempel kan jeg gennemskue hvordan det skal gøres, fordi
> datoen "passer" til begge tidspunkter.
> Problemet opstår hvis vi passerer midnat
> Variablene vil så være 13-05-2009 17:11 01:11
> Jeg kan ikke gennemskue hvordan jeg logisk skal besluttet at 01:11 hører til
> 14-05-2009
> Det skal nævnes, at hvis vi ryger over midnat er det altid "kun" til dagen
> efter - så der skal ikke tages højde for om der er flere døgn imellem.
> Nogen gode ideer?
>

Hvis 'sluttid' er mindre end 'starttid', ja så snakker vi dato+1

Ole Gaarde Kristense~ (18-10-2009)
Kommentar
Fra : Ole Gaarde Kristense~


Dato : 18-10-09 19:03

"Gert Krabsen" <fjernkrabsen@fjernkrabsenfjern.dk> skrev i en meddelelse
news:4adb5461$0$285$14726298@news.sunsite.dk...
>
> Hvis 'sluttid' er mindre end 'starttid', ja så snakker vi dato+1

Hej Gert
Havde faktisk overvejet om det var så simpelt.
Så er spørgsmålet bare om der er nogen nem måde at gøre det på direkte,
eller om man skal ud i noget med at skille timer og minutter ad, og så
checke om timer_slut er mindre end timer_start (og tilsvarende om de er lig
hinden og så min_slut holdt op mod min_start for at sikre at man fanger en
meget kort vagt fra f.eks. 10:30 til 10:59)

--
Med venlig hilsen
Ole Gaarde Kristensen



Gert Krabsen (18-10-2009)
Kommentar
Fra : Gert Krabsen


Dato : 18-10-09 19:43

Ole Gaarde Kristensen skrev:
> "Gert Krabsen" <fjernkrabsen@fjernkrabsenfjern.dk> skrev i en meddelelse
> news:4adb5461$0$285$14726298@news.sunsite.dk...
>> Hvis 'sluttid' er mindre end 'starttid', ja så snakker vi dato+1
>
> Hej Gert
> Havde faktisk overvejet om det var så simpelt.
> Så er spørgsmålet bare om der er nogen nem måde at gøre det på direkte,
> eller om man skal ud i noget med at skille timer og minutter ad, og så
> checke om timer_slut er mindre end timer_start (og tilsvarende om de er lig
> hinden og så min_slut holdt op mod min_start for at sikre at man fanger en
> meget kort vagt fra f.eks. 10:30 til 10:59)

Du slipper ikke for en opdeling, eks. ved hjæl af substring:

"Variablene vil så være 13-05-2009 17:11 01:11"

Hvis værdien af position 12-13 er større end pos. 18-19, ja så tilhører
sluttid dagen efter.

Eneste undtagelse:
Hvis du kan have vagter på op til 24 timer, så
"13-05-2009 17:11 17:21"
kan være enten tyve minutter eller et døgn og tyve minutter - ja så har
du et problem

Ole Gaarde Kristense~ (18-10-2009)
Kommentar
Fra : Ole Gaarde Kristense~


Dato : 18-10-09 20:37

"Gert Krabsen" <fjernkrabsen@fjernkrabsenfjern.dk> skrev i en meddelelse
news:4adb5fc3$0$274$14726298@news.sunsite.dk...
>
> Du slipper ikke for en opdeling, eks. ved hjæl af substring:
>
Øv

> "Variablene vil så være 13-05-2009 17:11 01:11"
>
> Hvis værdien af position 12-13 er større end pos. 18-19, ja så tilhører
> sluttid dagen efter.
>
Jeps - den er jeg med på.

> Eneste undtagelse:
> Hvis du kan have vagter på op til 24 timer, så
> "13-05-2009 17:11 17:21"
> kan være enten tyve minutter eller et døgn og tyve minutter - ja så har du
> et problem

Det skulle jeg ikke gerne have - altså så lange vagter
Har tænkt mig at "sikre" konverteringen ved at alle vagter som er meget
korte eller meget lange skal godkendes manuelt inden de ryger i databasen.

Tak for hjælpen!

--
Med venlig hilsen
Ole Gaarde Kristensen



Thomas Lindgaard (20-10-2009)
Kommentar
Fra : Thomas Lindgaard


Dato : 20-10-09 20:50

Hej

Nedenstående laver timestamps for start og slut ud fra følgende antagelser:

1) vagter er altid kortere end 24 timer
2) klokkeslet er altid skrevet med foranstillede nuller

<?php

$date_time = '13-05-2009 17:11 01:11';

// Split into date, start time and end time
$exploded = explode(' ', $date_time);
print_r($exploded);
$start_date = $exploded[0];
$start_time = $exploded[1];
$end_time = $exploded[2];

// Convert to timestamps
$start_timestamp = strtotime("$start_date $start_time");
$end_timestamp = strtotime("$start_date $end_time");

// Add a day if end time is before start time
if ( $end_time < $start_time ) $end_timestamp += 24 * 3600;

print "Start : ".date('Y-m-d H:i:s', $start_timestamp)."\n";
print "End : ".date('Y-m-d H:i:s', $end_timestamp)."\n";

?>

Output:
Array
(
[0] => 13-05-2009
[1] => 17:11
[2] => 01:11
)
Start : 2009-05-13 17:11:00
End : 2009-05-14 01:11:00
--
Mvh.
Thomas

Leif Neland (20-10-2009)
Kommentar
Fra : Leif Neland


Dato : 20-10-09 13:35

Ole Gaarde Kristensen skrev:
> Hej gruppe
>
> Jeg har nogle data om en vagt der er angivet med
> startdato, starttidspunkt, sluttidspunkt
> Eksempel 12-05-2009 16:01 23:51
> Inden de data ryger i en database skal jeg have lavet dem om til
> datetime-format, og jeg skal beregnes vagtens længde.
> I ovenstående eksempel kan jeg gennemskue hvordan det skal gøres, fordi
> datoen "passer" til begge tidspunkter.
> Problemet opstår hvis vi passerer midnat
> Variablene vil så være 13-05-2009 17:11 01:11
> Jeg kan ikke gennemskue hvordan jeg logisk skal besluttet at 01:11 hører til
> 14-05-2009
> Det skal nævnes, at hvis vi ryger over midnat er det altid "kun" til dagen
> efter - så der skal ikke tages højde for om der er flere døgn imellem.
> Nogen gode ideer?
>

Hvis du kan garantere at formatet altid er sådan; at 01:11 ikke bliver
til 1:11, så er det nok at sammenligne tekstmæssigt.

list ($dag,$starttid,$sluttid)=explode(" ",$inddata);
$aDag = explode("-",$dag);
$aStart = explode(":",$starttid);
$aSlut = explode(":",$sluttid);
if ($starttid>$sluttid) {$aSlut[0]+=24;} // Næste døgn
$start = mktime($aStart[0],$aStart[1],0,$aDag[1],$aDag[0],$aDag[2]);
$slut = mktime($aSlut[0], $aSlut[1], 0,$aDag[1],$aDag[0],$aDag[2]);

// mktime accepterer 13/05 25:11 som 14/05 01:11

$vagtlen=$slut-$start; // sekunder

Leif

$

Jonathan Stein (21-10-2009)
Kommentar
Fra : Jonathan Stein


Dato : 21-10-09 08:55

Ole Gaarde Kristensen skrev:

> Det skal nævnes, at hvis vi ryger over midnat er det altid "kun" til dagen
> efter - så der skal ikke tages højde for om der er flere døgn imellem.

Pas på med at tælle et døgn frem ved at lægge 24 timer til - det vil
give en fejl for dem, der er på vagt i næste weekend.

Hvis man har timestamps, kan det f.eks. gøres med:
$timestamp = strtotime('+1 day', $timestamp);

M.v.h.

Jonathan

--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/

Søg
Reklame
Statistik
Spørgsmål : 177449
Tips : 31962
Nyheder : 719565
Indlæg : 6408125
Brugere : 218879

Månedens bedste
Årets bedste
Sidste års bedste