beste manier van tijd berkenen
Er zijn zoveel manieren om het aantal dagen te berekenen tussen 2 datums, maar wat is nou de beste manier? Dagen moeten ook in het verleden kunnen, dus -9 dagen bijvoorbeeld.
Database met INTERVAL, PHP vind ik het makkelijkst met datetime
Gewijzigd op 17/04/2014 16:04:35 door Michael -
Toevoeging op 17/04/2014 16:24:43:
Ghehe... Als ik geen \ erbij zet doet ie het niet ghehehe :P
Gewijzigd op 17/04/2014 16:29:33 door John D
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
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
<?php
public function activity($start, $stop){
$dateNow = new \DateTime('NOW');
$dateStart = new \DateTime($start);
$dateEnd = new \DateTime($stop);
//Aantal dagen dat de aanbieding geldig is
$duration = $dateStart->diff($dateEnd)->format('%a dag(en)');
$returnDuration = 'De aanbieding is'.$duration .' geldig';
//Aantal dagen dat de aanbieding ingaat
$discountStart = $dateNow->diff($dateStart)->format('%R%a dag(en)');
$discountStartMessage = 'De aanbieding gaat in over '.$discountStart;
$discountStop = $dateNow->diff($dateEnd)->format('%R%a dag(en)');
//Aanbieding verlopen
if($dateNow >= $dateStart && $dateEnd <= $dateNow){
return 'Aanbieding is verlopen.';
} elseif($dateNow >= $dateStart){
return 'Aanbieding is actief';
} else {
return 'De aanbieding gaat in over'. $discountStart.'. Deze is geldig voor'.$duration;
}
}
?>
public function activity($start, $stop){
$dateNow = new \DateTime('NOW');
$dateStart = new \DateTime($start);
$dateEnd = new \DateTime($stop);
//Aantal dagen dat de aanbieding geldig is
$duration = $dateStart->diff($dateEnd)->format('%a dag(en)');
$returnDuration = 'De aanbieding is'.$duration .' geldig';
//Aantal dagen dat de aanbieding ingaat
$discountStart = $dateNow->diff($dateStart)->format('%R%a dag(en)');
$discountStartMessage = 'De aanbieding gaat in over '.$discountStart;
$discountStop = $dateNow->diff($dateEnd)->format('%R%a dag(en)');
//Aanbieding verlopen
if($dateNow >= $dateStart && $dateEnd <= $dateNow){
return 'Aanbieding is verlopen.';
} elseif($dateNow >= $dateStart){
return 'Aanbieding is actief';
} else {
return 'De aanbieding gaat in over'. $discountStart.'. Deze is geldig voor'.$duration;
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$startdate = new DateTime('5-4-2014');
$stopdate = new DateTime('12-4-2014');
$now = new DateTime();
if($now->diff($startdate)->invert && !$now->diff($stopdate)->invert)
echo 'Nu in de aanbieding';
else
{
if(!$now->diff($startdate)->invert)
echo 'Deze aanbieding gaat in over ' . ($now->diff($startdate)->d + 1) . ' dagen.';
else {
echo 'Deze aanbieding is al geweest.';
}
}
?>
$startdate = new DateTime('5-4-2014');
$stopdate = new DateTime('12-4-2014');
$now = new DateTime();
if($now->diff($startdate)->invert && !$now->diff($stopdate)->invert)
echo 'Nu in de aanbieding';
else
{
if(!$now->diff($startdate)->invert)
echo 'Deze aanbieding gaat in over ' . ($now->diff($startdate)->d + 1) . ' dagen.';
else {
echo 'Deze aanbieding is al geweest.';
}
}
?>
Toevoeging op 17/04/2014 18:59:42:
Op regel 12 heb ik het verschil in dagen met één dag verlengd omdat php dit zegt:
het is nu 17-4-2014 19:30:00 dus gaat de aanbieding in over 1 dag, 4 uur en 30 minuten.
Dat is meer dan één dag dus vandaar dat we van die 1 dag, 2 dagen maken door + 1 te doen.
Gewijzigd op 17/04/2014 18:56:10 door Frank Nietbelangrijk
Toevoeging op 17/04/2014 19:42:47:
Code (php)
1
2
3
4
5
2
3
4
5
SELECT
DATEDIFF(CURRENT_DATE, start_date) days_to_start,
DATEDIFF(CURRENT_DATE, end_date) days_to_end
FROM
special_prices
DATEDIFF(CURRENT_DATE, start_date) days_to_start,
DATEDIFF(CURRENT_DATE, end_date) days_to_end
FROM
special_prices
Met die 2 gegevens kan je alles afvangen.