Opzet tijdsverantwoording systeem
Hoi,
Ik ben bezig met het maken van een tijdsverantwoording systeem.
Nu had ik alleen time velden in mijn database, maar ben er achter gekomen dat dat niet handig is, en dat het datetime velden moeten zijn ivm berekeningen.
Nu heb ik alleen problemen met het invoeren van de juiste datum tijd notatie.
(mogelijk past deze vraag beter in het php forum, maar weet het niet zeker)
Het idee is dat een gebruiker de tijd in en uit moet invoeren :
Maandag 5 jun - tijd in : 10:00 tijd uit : 16:00
Dinsdag 6 jun - tijd in : 10:00 tijd uit : 16:00
Ik krijg het wel voor elkaar op de datum en tijden appart in de database te voeren.
Maar nu heb ik van de tijdsvelden een timedate veld gemaakt, hoe krijg ik hier de juiste waarde in ???? Maw....nu moet er 20100705 10:00:00 ingevoerd worden...hoe krijg ik dit voor elkaar...
En doe ik het zo wel goed ?
Ik ben bezig met het maken van een tijdsverantwoording systeem.
Nu had ik alleen time velden in mijn database, maar ben er achter gekomen dat dat niet handig is, en dat het datetime velden moeten zijn ivm berekeningen.
Nu heb ik alleen problemen met het invoeren van de juiste datum tijd notatie.
(mogelijk past deze vraag beter in het php forum, maar weet het niet zeker)
Het idee is dat een gebruiker de tijd in en uit moet invoeren :
Maandag 5 jun - tijd in : 10:00 tijd uit : 16:00
Dinsdag 6 jun - tijd in : 10:00 tijd uit : 16:00
Ik krijg het wel voor elkaar op de datum en tijden appart in de database te voeren.
Maar nu heb ik van de tijdsvelden een timedate veld gemaakt, hoe krijg ik hier de juiste waarde in ???? Maw....nu moet er 20100705 10:00:00 ingevoerd worden...hoe krijg ik dit voor elkaar...
En doe ik het zo wel goed ?
Gewijzigd op 06/07/2010 10:53:04 door John van der Linden
Datetime-velden hanteren de volgende syntax:
dus bijvoorbeeld:
Je moet dus zorgen dat dit op een eenzelfde wijze in de database wordt gezet:
Echter als je met de tijd wil rekenen kan je hier het beste een timestamp van maken met de functie strtotime() en dan als je bijvoorbeeld het aantal uur en minuten wil weten, kan je de inkloktijd van de uitkloktijd aftrekken en dan de uitkomst daarvan weer omzetten naar tijd dmv. bovengenoemde functie echter moet je dan gewoon de return value aanpassen naar bijvoorbeeld:
Edit: Zie post Blanche
dus bijvoorbeeld:
Je moet dus zorgen dat dit op een eenzelfde wijze in de database wordt gezet:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
function formatDate($sDate)
{
return date('Y-m-d H:i:s', strtotime($sDate));
}
// Deze code returned de string in de juiste waarde zodat je deze in de database in kan voeren.
{
return date('Y-m-d H:i:s', strtotime($sDate));
}
// Deze code returned de string in de juiste waarde zodat je deze in de database in kan voeren.
Edit: Zie post Blanche
Gewijzigd op 06/07/2010 13:02:43 door Justin S
Gebruik voor beide tijdstippen (zowel in- als uitklokken) altijd de volledige DATETIME velden. Zo voorkom je ten eerste al problemen als een dienst in twee verschillende dagen valt.
Zoals Justin al zegt kun je met PHP gewoon zorgen dat het tijdstip in het formaat 'yyyy-mm-dd hh:mm:ss' komt te staan waarna je het makkelijk in kunt voeren in de database. Alle berekeningen doe je vervolgens met behulp van de database, zie ook deze handleiding: http://phptuts.nl/view/1/
Zoals Justin al zegt kun je met PHP gewoon zorgen dat het tijdstip in het formaat 'yyyy-mm-dd hh:mm:ss' komt te staan waarna je het makkelijk in kunt voeren in de database. Alle berekeningen doe je vervolgens met behulp van de database, zie ook deze handleiding: http://phptuts.nl/view/1/
@Blanche: Ik vind het persoonlijk altijd fijner het met PHP te rekenen, maar dat is meer omdat ik altijd meerdere soorten weergaven heb in mijn tijdsysteem. Of kan je in de query ook meerdere variabele setten voor bijvoorbeeld totaal gewerkte uren, langst gewerkte uren, laatst gewerkte uren etc. in één query? Of moet je voor alle een aparte query uitvoeren?
Wat ik doe is gewoon de data ophalen, en dan vervolgens rekenen met de verschillende variabelen in php zelf o.b.v. timestamps, maar ik weet niet of dit de correcte manier is volgens jou Blanche?
@John: Als uit Blanche's uitleg blijkt dat dit beter via een query kan is het beter die optie toe te passen dan mijn gegeven voorbeeld hoe je met de tijd kan rekenen.
Wat ik doe is gewoon de data ophalen, en dan vervolgens rekenen met de verschillende variabelen in php zelf o.b.v. timestamps, maar ik weet niet of dit de correcte manier is volgens jou Blanche?
@John: Als uit Blanche's uitleg blijkt dat dit beter via een query kan is het beter die optie toe te passen dan mijn gegeven voorbeeld hoe je met de tijd kan rekenen.
Al die verschillende waarden kun je juist heel goed met de database bepalen! PHP is veel minder geschikt om te rekenen met data en tijden. De database daarentegen beschikt over een breed scala datum- en tijdfuncties (zie die handleiding).
Of alles in 1 query te stoppen is en of dat wel wenselijk is, is iets anders. Maar dan nog kun je beter een tweede of derde query uitvoeren dan dat je in PHP gaat lopen knoeien met timestamps :-)
Of alles in 1 query te stoppen is en of dat wel wenselijk is, is iets anders. Maar dan nog kun je beter een tweede of derde query uitvoeren dan dat je in PHP gaat lopen knoeien met timestamps :-)
oke, duidelijke verhaal...
Maar hoe krijg ik het precies voor elkaar op de datum en de tijd aan elkaar vast te plakken ? De huidige datum en tijd uitlezen lukt wel..
maar bv:
uitgelezen datum = 20100706 in bv $datum
ingevoerde tijd van gebruiker is 15:00, komt uit een FORM
<input type="text" name="A1" size="5">
hoe combineer ik deze twee gegevens ?? en waar ?
(waarschijnlijk in de insert.php die mijn form aanroept ??)
Maar hoe krijg ik het precies voor elkaar op de datum en de tijd aan elkaar vast te plakken ? De huidige datum en tijd uitlezen lukt wel..
maar bv:
uitgelezen datum = 20100706 in bv $datum
ingevoerde tijd van gebruiker is 15:00, komt uit een FORM
<input type="text" name="A1" size="5">
hoe combineer ik deze twee gegevens ?? en waar ?
(waarschijnlijk in de insert.php die mijn form aanroept ??)
Je moet 20100706 niet invoeren, daar moeten koppeltekens tussen staan, dus 2010-07-06.
Deze kan je gewoon combineren met de geposte tijd:
Voer dit maar eens in en test het eens.
Ik raad je wel aan duidelijkere namen te gebruiken voor je form velden en geen A1..
Beter is gewoon: name="starttijd"
Deze kan je gewoon combineren met de geposte tijd:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$datum = '2010-07-06';
$tijd = '15:00:00'; // of: $_POST['A1']
echo $datum.' '.$tijd;
//uitvoer: 2010-07-06 15:00:00
?>
$datum = '2010-07-06';
$tijd = '15:00:00'; // of: $_POST['A1']
echo $datum.' '.$tijd;
//uitvoer: 2010-07-06 15:00:00
?>
Voer dit maar eens in en test het eens.
Ik raad je wel aan duidelijkere namen te gebruiken voor je form velden en geen A1..
Beter is gewoon: name="starttijd"
Gewijzigd op 06/07/2010 14:44:45 door Justin S
ja, logisch natuurlijk weer :-)
Ga het even proberen, en bedankt maar weer !
Ga het even proberen, en bedankt maar weer !
Heb hier al vaker last van gehad:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?
function date_swap($datum_string,$convert_method='swap'){
switch($convert_method){
case 'swap':
return implode('-',array_reverse(explode('-',reset(explode(' ',$datum_string)))));
break;
case 'date_to_text':
$maanden = maanden();
$swap = array_reverse(explode('-',reset(explode(' ',$datum_string))));
$swap[0] = (int)$swap[0];
$swap[1] = $maanden[(int)$swap[1]];
return implode(' ',$swap);
break;
case 'date_and_time':
$string = explode(' ',$datum_string);
return implode('-',array_reverse(explode('-',$string[0]))).' '.$string[1];
break;
case 'date_h:m':
$string = explode(' ',$datum_string);
$string[1] = explode(':',$string[1]);
$string[1] = $string[1][0].':'.$string[1][1];
if(!empty($string[0]) && !empty($string[1])){
return implode('-',array_reverse(explode('-',$string[0]))).' om '.$string[1];
}else{
return 'Geen datum';
}
break;
default:
return implode('-',array_reverse(explode('-',reset(explode(' ',$datum_string)))));
break;
}
}
function maanden(){
return array(1 => 'januari',
2 => 'februari',
3 => 'maart',
4 => 'april',
5 => 'mei',
6 => 'juni',
7 => 'juli',
8 => 'augustus',
9 => 'september',
10 => 'oktober',
11 => 'november',
12 => 'december');
}
?>
function date_swap($datum_string,$convert_method='swap'){
switch($convert_method){
case 'swap':
return implode('-',array_reverse(explode('-',reset(explode(' ',$datum_string)))));
break;
case 'date_to_text':
$maanden = maanden();
$swap = array_reverse(explode('-',reset(explode(' ',$datum_string))));
$swap[0] = (int)$swap[0];
$swap[1] = $maanden[(int)$swap[1]];
return implode(' ',$swap);
break;
case 'date_and_time':
$string = explode(' ',$datum_string);
return implode('-',array_reverse(explode('-',$string[0]))).' '.$string[1];
break;
case 'date_h:m':
$string = explode(' ',$datum_string);
$string[1] = explode(':',$string[1]);
$string[1] = $string[1][0].':'.$string[1][1];
if(!empty($string[0]) && !empty($string[1])){
return implode('-',array_reverse(explode('-',$string[0]))).' om '.$string[1];
}else{
return 'Geen datum';
}
break;
default:
return implode('-',array_reverse(explode('-',reset(explode(' ',$datum_string)))));
break;
}
}
function maanden(){
return array(1 => 'januari',
2 => 'februari',
3 => 'maart',
4 => 'april',
5 => 'mei',
6 => 'juni',
7 => 'juli',
8 => 'augustus',
9 => 'september',
10 => 'oktober',
11 => 'november',
12 => 'december');
}
?>
@Pieter: ik vraag me af of de TS veel aan dit scriptje heeft. Zodra de datum in het formaat yyyy-mm-dd hh:mm:ss staat, kan hij het gewoon invoeren in de database. Ook het opmaken kan vervolgens eenvoudig tijdens het uitlezen in de query met behulp van DATE_FORMAT()...




