Rekenen met datetime
2008-09-03 21:45:00 (3 september 2008 21:45)
Stel we zijn nu
2008-09-04 22:45:00 (4 september 2008 22:45)
=> we zijn 1 dag 1 uur later, 25 uren later
Hoe kan ik nu met behulp van php of queries, bepalen dat we 1 dag 1 uur later of 25 uren later zijn.
Het enige wat ik momenteel kan bereken is dat we 1 dag later zijn met datediff... Maar ik vind niet zo direct iets om ook het aantal uren in rekening te brengen...
Weet iemand raad?
Code (php)
Geeft netjes de melding 25. Het verschil wordt uitgedrukt in seconde's
Danny schreef op 08.09.2008 20:02:
Dit doe je dus gewoon met SQL:
Misschien niet correct, maar die richting moet je op.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
Wat jij post is niet wat ik nodig heb.
Ik moet gewoon van een gegeven datum altijd kunnen berekenen hoeveel tijd er tussen zit met de HUIDIGE datum en tijd
2008-09-03 21:45:00 (3 september 2008 21:45) = datum in database
2008-09-08 20:00 = huidige datum
het verschil tussen die twee is.... 4 dagen 23 uur ofzoiets
En dit moet berekend worden... De oplossing van Danny is volgens mij wel mogelijk.. Maar kan het niet beter?
Gewijzigd op 01/01/1970 01:00:00 door Michiel
Gewijzigd op 01/01/1970 01:00:00 door Michiel
Michiel schreef op 08.09.2008 20:13:
Jurgen,
Wat jij post is niet wat ik nodig heb.
Ik moet gewoon van een gegeven datum altijd kunnen berekenen hoeveel tijd er tussen zit.
2008-09-03 21:45:00 (3 september 2008 21:45) = datum in database
2008-09-08 20:00 = huidige datum
het verschil tussen die twee is.... 4 dagen 23 uur ofzoiets
En dit moet berekend worden... De oplossing van Danny is volgens mij wel mogelijk.. Maar kan het niet beter?
Wat jij post is niet wat ik nodig heb.
Ik moet gewoon van een gegeven datum altijd kunnen berekenen hoeveel tijd er tussen zit.
2008-09-03 21:45:00 (3 september 2008 21:45) = datum in database
2008-09-08 20:00 = huidige datum
het verschil tussen die twee is.... 4 dagen 23 uur ofzoiets
En dit moet berekend worden... De oplossing van Danny is volgens mij wel mogelijk.. Maar kan het niet beter?
Iets in die richting, die kun je met DATE_FORMAT(mySQL) weer opmaken.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
Ik had wat tijd over:
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
50
51
52
53
54
55
56
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
50
51
52
53
54
55
56
<?php
function timediff($firstdate, $seconddate) {
/**
* Author: Danny van der Sluys
* Contact: [email protected]
* Script: Mogelijkheid om het verscil tussen twee datums uit te rekenen.
* Version: 1.00
*/
// Start uitrekenen verschil.
if ( $firstdate < $seconddate) {
// Firstdate is kleiner, dus verminderen op de grootste waarde
$diff = (strtotime($seconddate) - strtotime($firstdate));
} else {
// De seconddate is kleiner dus verminderen op de grootste waarde
// Ook beide gelijke waardes word deze lus uitgevoerd.
$diff = (strtotime($firstdate) - strtotime($seconddate));
} // Einde berekenen verschil.
// Start met opbreken van het verschil.
// Weken uitrekenen
$returnarray['weken'] = floor($diff / (60*60*24*7));
// Weken van het verschil af halen.
$diff = $diff % (60*60*24*7);
// Dagen uitrekenen
$returnarray['dagen'] = floor($diff / (60*60*24));
// Weken van het verschil af halen.
$diff = $diff % (60*60*24);
// Uren uitrekenen
$returnarray['uren'] = floor($diff / (60*60));
// Weken van het verschil af halen.
$diff = $diff % (60*60);
// Minuten uitrekenen
$returnarray['minuten'] = floor($diff / 60);
// Weken van het verschil af halen.
$diff = $diff % 60;
// En ook de secondes retourneren.
$returnarray['secondes'] = $diff;
// Retourneren
return $returnarray;
}
$result = timediff('2008-09-03 21:45:00', '2008-10-04 22:48:10');
echo '<pre>';
print_r($result);
echo '</pre>';
?>
function timediff($firstdate, $seconddate) {
/**
* Author: Danny van der Sluys
* Contact: [email protected]
* Script: Mogelijkheid om het verscil tussen twee datums uit te rekenen.
* Version: 1.00
*/
// Start uitrekenen verschil.
if ( $firstdate < $seconddate) {
// Firstdate is kleiner, dus verminderen op de grootste waarde
$diff = (strtotime($seconddate) - strtotime($firstdate));
} else {
// De seconddate is kleiner dus verminderen op de grootste waarde
// Ook beide gelijke waardes word deze lus uitgevoerd.
$diff = (strtotime($firstdate) - strtotime($seconddate));
} // Einde berekenen verschil.
// Start met opbreken van het verschil.
// Weken uitrekenen
$returnarray['weken'] = floor($diff / (60*60*24*7));
// Weken van het verschil af halen.
$diff = $diff % (60*60*24*7);
// Dagen uitrekenen
$returnarray['dagen'] = floor($diff / (60*60*24));
// Weken van het verschil af halen.
$diff = $diff % (60*60*24);
// Uren uitrekenen
$returnarray['uren'] = floor($diff / (60*60));
// Weken van het verschil af halen.
$diff = $diff % (60*60);
// Minuten uitrekenen
$returnarray['minuten'] = floor($diff / 60);
// Weken van het verschil af halen.
$diff = $diff % 60;
// En ook de secondes retourneren.
$returnarray['secondes'] = $diff;
// Retourneren
return $returnarray;
}
$result = timediff('2008-09-03 21:45:00', '2008-10-04 22:48:10');
echo '<pre>';
print_r($result);
echo '</pre>';
?>
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
50
51
52
53
54
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
50
51
52
53
54
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
/**
* @author Robert Deiman
* @copyright 2008
* @param $startdate datestring This is the oldest date for the input (the smallest date)
* @param $enddate datestring This is the youngest date for the input (the biggest date)
* @param $showdays boolean If true, function returns the number of days and the rest of the time in hours. Otherwise it returns the number of hours. Default value = true.
*/
function timediff($startdate, $enddate, $showdays = true){
//calculate difference in seconds
$diff = (strtotime($enddate) - strtotime($startdate));
//calculate difference in hours
$number_hours = $diff/60/60;
if($showdays == false){
//return hours, as rounded value
return round($number_hours);
}
elseif($showdays == true){
$date = array();
$date['days'] = floor($number_hours /24);
$date['hours'] = round($number_hours - $date['days'] * 24);
if($date['days'] == 1){
$date['daydesc'] = 'dag';
}
else{
$date['daydesc'] = 'dagen';
}
return $date;
}
else{
return 'U moet wel een geldige waarde opgeven voor $showdays.';
}
}
/* -------VOORBEELD-------- */
$startdatum = '2008-09-03 22:45:00';
$einddatum = '2008-09-04 23:47:51';
echo 'Het verschil tussen '.$einddatum.' en '.$startdatum.' is '.timediff($startdatum,$einddatum,false).' uur<br />';
$dagen = timediff($startdatum,$einddatum);
echo 'In dagen is het verschil tussen '.$einddatum.' en '.$startdatum.' is '.$dagen['days'].' '.$dagen['daydesc'].' en '.$dagen['hours'].' uur.';
?>
ini_set('display_errors', 1);
error_reporting(E_ALL);
/**
* @author Robert Deiman
* @copyright 2008
* @param $startdate datestring This is the oldest date for the input (the smallest date)
* @param $enddate datestring This is the youngest date for the input (the biggest date)
* @param $showdays boolean If true, function returns the number of days and the rest of the time in hours. Otherwise it returns the number of hours. Default value = true.
*/
function timediff($startdate, $enddate, $showdays = true){
//calculate difference in seconds
$diff = (strtotime($enddate) - strtotime($startdate));
//calculate difference in hours
$number_hours = $diff/60/60;
if($showdays == false){
//return hours, as rounded value
return round($number_hours);
}
elseif($showdays == true){
$date = array();
$date['days'] = floor($number_hours /24);
$date['hours'] = round($number_hours - $date['days'] * 24);
if($date['days'] == 1){
$date['daydesc'] = 'dag';
}
else{
$date['daydesc'] = 'dagen';
}
return $date;
}
else{
return 'U moet wel een geldige waarde opgeven voor $showdays.';
}
}
/* -------VOORBEELD-------- */
$startdatum = '2008-09-03 22:45:00';
$einddatum = '2008-09-04 23:47:51';
echo 'Het verschil tussen '.$einddatum.' en '.$startdatum.' is '.timediff($startdatum,$einddatum,false).' uur<br />';
$dagen = timediff($startdatum,$einddatum);
echo 'In dagen is het verschil tussen '.$einddatum.' en '.$startdatum.' is '.$dagen['days'].' '.$dagen['daydesc'].' en '.$dagen['hours'].' uur.';
?>
edit:
Ik had net gemist dat het om een database ging, dan laat je de database rekenen, die kan dit handiger/ sneller.
NOW() geeft in SQL de huidige tijd, en je kan deze vergelijken met een datum uit een datumveld.
NOW() geeft in SQL de huidige tijd, en je kan deze vergelijken met een datum uit een datumveld.
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Ik weet niet wat de query van pgFrank zou doen voor mijn probleem..
De query van Frank selecteert alle data uit de database, waarbij de datum meer dan 1 dag, 1 uur en 25 minuten geleden is.