|
| 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/
| |
|
|