Opzet tijdsverantwoording systeem
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
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
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/
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.
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 :-)
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 ??)
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
Ga het even proberen, en bedankt maar weer !
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()...