HiDayurie Dave
HiDayurie Dave

Reputation: 1807

PHP Display Hour range today and tomorrow

I've got the tutorial from this post.

The PHP code:

$start = '20:00:00';
$end = '07:59:59'; //need to show until tomorrow time.
$time = strtotime($start);
$timeStop = strtotime($end);

while($time<$timeStop) {
    echo date('H:i', $time);
    $time = strtotime('+30 minutes', $time);
    echo ' - ' . date('H:i', $time) . '<br/>';
}

Now I need to show the time from 20:00:00 until tomorrow at 07:59:59.

Current code when I'm trying to run it got no result (empty).

Upvotes: 0

Views: 922

Answers (3)

Ussaid Iqbal
Ussaid Iqbal

Reputation: 796

The problem with your code is that it's just comparing the times not dates so obviously in your example the start time is greater than the end time. Try the following example it works perfectly.

<?php

$TodayDate = date("Y-m-d");

$start = $TodayDate.' 20:00:00';

$TomorrowDate = new DateTime('tomorrow');

$TomorrowDate = $TomorrowDate->format('Y-m-d');

$end = $TomorrowDate.' 07:59:59'; //need to show until tomorrow time.
$time = strtotime($start);
$timeStop = strtotime($end);

while($time<$timeStop) {
    echo date('H:i', $time);
    $time = strtotime('+30 minutes', $time);
    echo ' - ' . date('H:i', $time) . '<br/>';
}
?>
20:00 - 20:30
20:30 - 21:00
21:00 - 21:30
21:30 - 22:00
22:00 - 22:30
22:30 - 23:00
23:00 - 23:30
23:30 - 00:00
00:00 - 00:30
00:30 - 01:00
01:00 - 01:30
01:30 - 02:00
02:00 - 02:30
02:30 - 03:00
03:00 - 03:30
03:30 - 04:00
04:00 - 04:30
04:30 - 05:00
05:00 - 05:30
05:30 - 06:00
06:00 - 06:30
06:30 - 07:00
07:00 - 07:30
07:30 - 08:00

Upvotes: 2

space7panda
space7panda

Reputation: 26

Just add some date. Search for 08:00:00 of which day?

$start = '01/01/2019 20:00:00';
$end = '01/02/2019 08:00:00';

$time = strtotime($start);
$timeStop = strtotime($end);

while ($time<$timeStop) {
    echo date('H:i', $time);
    $time = strtotime('+30 minutes', $time);
    echo ' - ' . date('H:i', $time) . '<br/>';
}

Upvotes: 1

Professor Abronsius
Professor Abronsius

Reputation: 33813

You could use the DateTime class with it's associated methods - add ~ this would perhaps simplify the task? It is simple to modify the above to work with a pre-defined start time / end time

$now = new DateTime();
$end = new DateTime( date( DATE_ATOM, strtotime( 'now + 1day' ) ) );

while( $now->add( new DateInterval('PT30M') ) < $end ){
    echo $now->format( 'H:i:s' ) . '<br />';
}

To use the actual desired start/end times

$start = date( DATE_ATOM, strtotime( 'today 8pm' ) );
$finish = date( DATE_ATOM, strtotime( sprintf( '%s + 1day',$start ) ) );

$now = new DateTime( $start);
$end = new DateTime( $finish );

while( $now->add( new DateInterval('PT30M') ) < $end ){
    echo $now->format( 'H:i:s' ) . '<br />';
}

Upvotes: 1

Related Questions