Tijd verschil berekenen
Ik heb het eens even goed uitgepluist en het volgende is aan de hand.
Onderstaande cijfers zijn de tijd van het restaurant en de tijd van nu (toen ik het teste)
TIJD OPEN 1480777200
TIJD SLUITEN 1480806000
TIJD NU 1480720985
Op dat moment was het zaterdagochtend heel vroeg om 00:24, waarbij hij om 16:00 open gaat op vrijdag en sluit op zaterdagochtend heel vroeg 01:50. Hij zou dus nog open moeten zijn. Maar zoals je ziet pakt hij dus nog een andere tijd..
Toevoeging op 01/12/2016 17:01:44:
Heb nu wat getest met datums, en kom op het volgende uit;
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
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
$explode = explode(';', $delivery_times);
function TimeToDate($time)
{
$date = date("1994-03-03 $time");
return $date;
}
function TimeToCloseDate($time)
{
$_SESSION['dateNow'] = "1994-03-03";
$date = date("1994-03-03 $time");
return $date;
}
function TimeToCloseBiggerDate($time)
{
$_SESSION['dateNow'] = "1994-03-04";
$date = date("1994-03-04 $time");
return $date;
}
foreach ($explode as $status) {
$explode = explode(',', $status);
if ($dagNamen[date('D')] == $dagen[$explode[0]]) {
$open_time = $explode[1];
$closed_time = $explode[2];
if ($open_time >= $closed_time){
echo $closed_time = TimeToCloseBiggerDate($explode[2])."<br/>";
}else{
echo $closed_time = TimeToCloseDate($explode[2])."<br/>";
}
echo $open_time = TimeToDate($explode[1])."<br/>";
echo $now = date($_SESSION['dateNow']." H:i");
if ($open_time <= $now && $closed_time >= $now)
{
echo "<div class='companypage__restaurantopen'>Open</div>";
}
else
{
echo "<div class='companypage__restaurantclosed'>Gesloten</div>";
}
}
}
function TimeToDate($time)
{
$date = date("1994-03-03 $time");
return $date;
}
function TimeToCloseDate($time)
{
$_SESSION['dateNow'] = "1994-03-03";
$date = date("1994-03-03 $time");
return $date;
}
function TimeToCloseBiggerDate($time)
{
$_SESSION['dateNow'] = "1994-03-04";
$date = date("1994-03-04 $time");
return $date;
}
foreach ($explode as $status) {
$explode = explode(',', $status);
if ($dagNamen[date('D')] == $dagen[$explode[0]]) {
$open_time = $explode[1];
$closed_time = $explode[2];
if ($open_time >= $closed_time){
echo $closed_time = TimeToCloseBiggerDate($explode[2])."<br/>";
}else{
echo $closed_time = TimeToCloseDate($explode[2])."<br/>";
}
echo $open_time = TimeToDate($explode[1])."<br/>";
echo $now = date($_SESSION['dateNow']." H:i");
if ($open_time <= $now && $closed_time >= $now)
{
echo "<div class='companypage__restaurantopen'>Open</div>";
}
else
{
echo "<div class='companypage__restaurantclosed'>Gesloten</div>";
}
}
}
Bovenstaande werkte prima, enkel door dit zinnetje: "if ($dagNamen[date('D')] == $dagen[$explode[0]]) {" pakt hij na 00:00 de tijd van de volgende dag, omdat hij dan controleert of de dag overeen komt, dus dan pakt hij na 00:00 de volgende dag. Terwijl een restaurant bijvoorbeeld soms tot 01:50 doorgaat.. Hoe kan ik dit dan oplossen?
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
57
58
59
60
61
62
63
64
65
66
67
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
57
58
59
60
61
62
63
64
65
66
67
<?php
/**
* Helper function GetFrom
* @param mixed $key
* @param array $array
* @param mixed $default
*
* @return mixed the value if $key exists else $default
*/
function GetFrom($key, array $array, $default = false)
{
if(array_key_exists($key, $array))
{
return $array[$key];
}
return $default;
}
function TimeToSec($time)
{
$parts = explode(':', $time);
return (int) $parts[0] * 3600 +
(int) $parts[1] * 60 + (count($parts) == 3 ? (int) $parts[2] : 0);
}
$sTimes = '0,16:00,00:50;1,16:00,21:20;2,16:00,21:20;4,16:00,00:00;5,16:00,01:20;6,16:00,01:50;3,16:00,00:00';
$aTimes = explode(';',$sTimes);
// maak een array met opnenings tijden en het dagnummer als key
$aOpenhours = array();
foreach ($aTimes as $day)
{
$aDay = explode(',', $day);
$aOpenhours[(int) $aDay[0]] = array(TimeToSec($aDay[1]), $aDay[2] != '00:00' ? TimeToSec($aDay[2]) : 86400);
}
$checks = array(time(), strtotime('2016-12-03 00:30'),
strtotime('2016-12-04 00:55'),
strtotime('2016-12-04 23:59'),
strtotime('2016-12-05 00:55'),);
foreach ($checks as $time) {
$dayNum = (int) date('w', $time);
$openToday = GetFrom($dayNum, $aOpenhours, array(-86401,-86400));
$midnight = strtotime(date('Y-m-d 00:00:00', $time));
$openToday[0] = $midnight + $openToday[0];
$openToday[1] = $midnight + $openToday[1];
if ($openToday[0] >= $openToday[1])
{
$openToday[1] += 86400;
}
$midnight -= 86400;
$dayNum = $dayNum != 0 ? $dayNum - 1 : 6;
$openYesterday = GetFrom($dayNum, $aOpenhours, array(-86401,-86400));
$openYesterday[0] = $midnight + $openYesterday[0];
$openYesterday[1] = $midnight + $openYesterday[1];
if ($openYesterday[0] >= $openYesterday[1])
{
$openYesterday[1] += 86400;
}
$isOpen = ($time >= $openToday[0] && $time < $openToday[1]) || ($time >= $openYesterday[0] && $time < $openYesterday[1]);
echo 'Op ', date('d-m-Y H:i', $time), ' is het restaurant ',
$isOpen ? 'open' : 'gesloten', '.<br>';
}
?>
/**
* Helper function GetFrom
* @param mixed $key
* @param array $array
* @param mixed $default
*
* @return mixed the value if $key exists else $default
*/
function GetFrom($key, array $array, $default = false)
{
if(array_key_exists($key, $array))
{
return $array[$key];
}
return $default;
}
function TimeToSec($time)
{
$parts = explode(':', $time);
return (int) $parts[0] * 3600 +
(int) $parts[1] * 60 + (count($parts) == 3 ? (int) $parts[2] : 0);
}
$sTimes = '0,16:00,00:50;1,16:00,21:20;2,16:00,21:20;4,16:00,00:00;5,16:00,01:20;6,16:00,01:50;3,16:00,00:00';
$aTimes = explode(';',$sTimes);
// maak een array met opnenings tijden en het dagnummer als key
$aOpenhours = array();
foreach ($aTimes as $day)
{
$aDay = explode(',', $day);
$aOpenhours[(int) $aDay[0]] = array(TimeToSec($aDay[1]), $aDay[2] != '00:00' ? TimeToSec($aDay[2]) : 86400);
}
$checks = array(time(), strtotime('2016-12-03 00:30'),
strtotime('2016-12-04 00:55'),
strtotime('2016-12-04 23:59'),
strtotime('2016-12-05 00:55'),);
foreach ($checks as $time) {
$dayNum = (int) date('w', $time);
$openToday = GetFrom($dayNum, $aOpenhours, array(-86401,-86400));
$midnight = strtotime(date('Y-m-d 00:00:00', $time));
$openToday[0] = $midnight + $openToday[0];
$openToday[1] = $midnight + $openToday[1];
if ($openToday[0] >= $openToday[1])
{
$openToday[1] += 86400;
}
$midnight -= 86400;
$dayNum = $dayNum != 0 ? $dayNum - 1 : 6;
$openYesterday = GetFrom($dayNum, $aOpenhours, array(-86401,-86400));
$openYesterday[0] = $midnight + $openYesterday[0];
$openYesterday[1] = $midnight + $openYesterday[1];
if ($openYesterday[0] >= $openYesterday[1])
{
$openYesterday[1] += 86400;
}
$isOpen = ($time >= $openToday[0] && $time < $openToday[1]) || ($time >= $openYesterday[0] && $time < $openYesterday[1]);
echo 'Op ', date('d-m-Y H:i', $time), ' is het restaurant ',
$isOpen ? 'open' : 'gesloten', '.<br>';
}
?>
Om te kunnen omgaan met sluitingstijden na middernacht wordt gecontroleerd op de openingstijden van de betreffende dag en de openingstijden van de dag ervoor.
Nu zit ik nog met een klein probleempje, afhankelijk van welke dag het is wordt de dag gehighlight, maar als hij vrijdag tot 01:50 open is, highlight hij hem na 00:00 al op zaterdag, dat doe ik als volgt;
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
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
$explode = explode(';', $delivery_times);
sort($explode);
foreach ($explode as $e) {
$explode = explode(',', $e);
if ($dagen[$explode[0]] != "Zondag") {
if ($dagNamen[date('D')] == $dagen[$explode[0]]) {
echo '
<ul class="companypage__today">
<li class="companypage__firstitem">' . $dagen[$explode[0]] . ':</li>
<li class="companypage__seconditem">' . (($explode[1] == '00:00') ? "Gesloten" : $explode[1] . ' - ' . $explode[2]) . '</li>
</ul>
';
} else {
echo '
<ul>
<li class="companypage__firstitem">' . $dagen[$explode[0]] . ':</li>
<li class="companypage__seconditem">' . (($explode[1] == '00:00') ? "Gesloten" : $explode[1] . ' - ' . $explode[2]) . '</li>
</ul>
';
}
} else {
if ($dagNamen[date('D')] == $dagen[$explode[0]]) {
$laatsteDag = '
<ul class="companypage__today">
<li class="companypage__firstitem">' . $dagen[$explode[0]] . ':</li>
<li class="companypage__seconditem">' . (($explode[1] == '00:00') ? "Gesloten" : $explode[1] . ' - ' . $explode[2]) . '</li>
</ul>
';
} else {
$laatsteDag = '
<ul>
<li class="companypage__firstitem">' . $dagen[$explode[0]] . ':</li>
<li class="companypage__seconditem">' . (($explode[1] == '00:00') ? "Gesloten" : $explode[1] . ' - ' . $explode[2]) . '</li>
</ul>
';
}
}
}
echo $laatsteDag;
sort($explode);
foreach ($explode as $e) {
$explode = explode(',', $e);
if ($dagen[$explode[0]] != "Zondag") {
if ($dagNamen[date('D')] == $dagen[$explode[0]]) {
echo '
<ul class="companypage__today">
<li class="companypage__firstitem">' . $dagen[$explode[0]] . ':</li>
<li class="companypage__seconditem">' . (($explode[1] == '00:00') ? "Gesloten" : $explode[1] . ' - ' . $explode[2]) . '</li>
</ul>
';
} else {
echo '
<ul>
<li class="companypage__firstitem">' . $dagen[$explode[0]] . ':</li>
<li class="companypage__seconditem">' . (($explode[1] == '00:00') ? "Gesloten" : $explode[1] . ' - ' . $explode[2]) . '</li>
</ul>
';
}
} else {
if ($dagNamen[date('D')] == $dagen[$explode[0]]) {
$laatsteDag = '
<ul class="companypage__today">
<li class="companypage__firstitem">' . $dagen[$explode[0]] . ':</li>
<li class="companypage__seconditem">' . (($explode[1] == '00:00') ? "Gesloten" : $explode[1] . ' - ' . $explode[2]) . '</li>
</ul>
';
} else {
$laatsteDag = '
<ul>
<li class="companypage__firstitem">' . $dagen[$explode[0]] . ':</li>
<li class="companypage__seconditem">' . (($explode[1] == '00:00') ? "Gesloten" : $explode[1] . ' - ' . $explode[2]) . '</li>
</ul>
';
}
}
}
echo $laatsteDag;
zondag zit in het begin van de array, vandaar dat ik dat op deze manier heb opgelost. Maar nu moet ik erin gaan verwerken dat hij pas hightlight als de vorige dag gesloten is. Ik heb geprobeerd om dat in combinatie te doen met het vorige script hierboven van ger, maar dat is me niet gelukt. Toch ben ik er wel van overtuigd dat het moet lukken. Kan iemand me helpen?