如何使用PHP显示日期时间列表中的下一个日期和时间?

时间:2016-05-26 05:37:36

标签: php

我在mysql数据库中有以下日期格式值:

1464436800 ( In php, date will be 2016-05-28 8:00 AM )
1464440400 ( In php, date will be 2016-05-28 9:00 AM )
1464444000 ( In php, date will be 2016-05-28 10:00 AM )
1464447600 ( In php, date will be 2016-05-28 11:00 AM )
1464552000 ( In php, date will be 2016-05-29 4:00 Am )

现在我想从那些数据库值列表中使用php显示下一个日期和时间。

例如:如果当前日期和时间 2016-05-25 8:00 ,那么我想选择/显示下一个日期时间 2016-05-28上午9:00

下一个日期和时间可以是1小时或2小时或5小时后或1天或2天后等。

但文本日期和时间显示在我的数据库中的日期时间值列表中,就像我显示的那样。

我怎么能用php做到这一点?

更新:

<?php
$get_menu = mysqli_query($conn, "SELECT DISTINCT products.p_title, products.p_price, product_images.p_list_image, chef_profile.live_at, chef_profile.fname, chef_profile.lname, chef_profile.is_verified_chef, users.user_avator, chef_review.r_star, product_date_time.date, product_date_time.time FROM products LEFT JOIN product_images ON products.p_id = product_images.p_id LEFT JOIN chef_profile ON products.u_id = chef_profile.u_id LEFT JOIN users ON products.u_id = users.u_id LEFT JOIN chef_review ON products.p_id =  chef_review.p_id LEFT JOIN product_date_time ON product_date_time.p_id = products.p_id GROUP BY products.p_id");

$num_menu =  mysqli_num_rows($get_menu);
while( $get_result = mysqli_fetch_array($get_menu) ) {

$menu_title = htmlspecialchars(ucfirst($get_result['p_title']));
$menu_price = htmlspecialchars($get_result['p_price']);        
$menu_image = htmlspecialchars($get_result['p_list_image']) ? htmlspecialchars($get_result['p_list_image']) : "no-menu-preview.png";
$live_at =  htmlspecialchars($get_result['live_at']);
$fname = htmlspecialchars($get_result['fname']);
$lname = htmlspecialchars($get_result['lname']);
$date = htmlspecialchars($get_result['date']);        

if(!empty($date)) {
    $date_time = 'Next Date : ';
    $date_time .= date('D, F jS', $date);
    $date_time .= ' at ';
    $date_time .= date('G:00 A', $date);
} else {
    $date_time = 'No event time found';
}

$user_avator =  htmlspecialchars($get_result['user_avator']) ? htmlspecialchars($get_result['user_avator']) : "empty-photo.jpg";

$is_verified =  (int) $get_result['is_verified_chef'];
if($is_verified == 1) {
    $is_verified = '<small><i class="fa fa-check-circle "></i>&nbsp;Verified Chef</small>';
} elseif($is_verified == 0) {
    $is_verified = '<small>Not Verified</small>';
}
$r_star =  (int) $get_result['r_star'];

?>


<div class="col-md-4 col-sm-6">               
     <div class="items">
        <div class="img-effect">

            <a href="menu-details?<?php ?>"><img src="<?php echo IMG_DIR."menu_images/$menu_image" ?>" alt="" class="img-responsive"></a>
        </div>
        <div class="product-list">                
            <div class="col-md-9 no-p-m product-title">
                <h4><a href="product-list"><?php echo $menu_title; ?></a></h4>                        
            </div>
            <div class="col-md-3 price">
                <p class="text-right">$ <?php echo $menu_price; ?></p>        
            </div>
            <hr class="items-hr">
            <div class="row">
                <div class="col-xs-4">
                    <img src="<?php echo IMG_DIR."users_avator/$user_avator" ?>" alt="" class="img-responsive img-circle" width="100">
                </div>
                <div class="col-xs-8">
                    <p><strong>Chef <?php echo $fname . ' ' . $lname; ?></strong></p>                        
                    <em><?php echo $live_at; ?></em>                               
                    <div class="col-xs-12 col-sm-12 review">
                        <?php echo $is_verified; ?><br/>                                
                        <?php
                        if($r_star == 0 ) {
                              echo 'No Review';
                        } else {
                            for($x = 1; $x <= $r_star; $x++) {
                                 echo "<i class='fa fa-star'></i>";                                        
                            }
                            echo " ($r_star Review)";
                        }
                       ?>
                    </div>                     
                </div>                    
            </div>                
        </div>
        <div class="next-date">
            <p><?php echo $date_time; ?></p>
        </div>                
    </div>
</div>
<?php }  ?>

4 个答案:

答案 0 :(得分:1)

您可以使用以下结构:

$newdate =  date('Y-m-d', strtotime("+30 days"));

您可以在每天需要的时候替换30号码

答案 1 :(得分:1)

在此while循环的运行时期间,您无法确定所有事件时间是什么。因此,您无法选择一个。它们正在流入(据我所知)。 您必须先拥有所有数据,才能选择下一个数据。

因此您有3个选项:

1。反转输出

通过反转输出(考虑按日期时间排序),您可以保留变量$nextEvent。我想说这是首选的方法,如果您可以稍后在浏览器中对数据进行排序,或者按服务器排序是无关紧要的。

<?php
$get_menu = mysqli_query($conn, "[...] ORDER BY <date> DESC");

$num_menu =  mysqli_num_rows($get_menu);
$nextEvent = '';
while( $get_result = mysqli_fetch_array($get_menu) ) {

    [...]
    $date = htmlspecialchars($get_result['date']);        

    if(!empty($nextEvent)) {
        echo 'Next Event at: '.$nextEvent;
    }
    $nextEvent = $date;
    [...]
}

2。您运行所有事件两次

全部运行意味着,您有一个while循环并将数据保存在数组中,并在输出期间稍后运行此数组。 现在您拥有所有数据,我的方法仍然适用。

考虑到你有一个带有值的数组

<?php
$a = array(
    1464436800,
    1464440400,
    1464444000,
    1464447600,
    1464552000
);

您可以在array_search上执行array_values,然后获得您正在寻找的元素的位置。如果你那么+1(考虑到你不在最后一个),你将得到下一个元素。

sort($a); // Just to be on the safe side, it is in the right order
var $index = array_search('1464444000',array_values($a));
if($index !== count($a)) {
    // next Element $a[$index+1];
} else {
    echo 'you are already at the last one'
}

3。每次在循环中进行SQL查询

(不推荐)

每次处理事件时,您都可以创建一个SQL查询来选择下一个事件。 这将是一个巨大的减速,因为必须运行很多SQL Querys。

答案 2 :(得分:0)

要首先选择下一行,您需要使用php

将时间转换为时间戳
echo $newdate = strtotime("2016-05-28 8:00");// get timestamp

然后使用query从数据库中获取新时间

SELECT next_date FROM YOUR_TABLE WHERE next_date > $newdate ORDER BY next_date LIMIT 1;

你可以在循环中创建yo数组作为

$array[] = htmlspecialchars($get_result['date']); 

要获取新的值表格,请使用

$array = array(
    '0'=>1464436800,
    '1'=>1464440400,
    '2'=>1464444000,
    '3'=>1464447600,
    '4'=>1464552000
);

echo current(array_slice($array, array_search(0, array_keys($array)) + 1, 1));// pass your array key into array_search

检查DEMO

答案 3 :(得分:0)

试试这个..

将字段名称添加到数据库以用作计数器。 例如:

+----------+----+
|dateTime  |cntr|
+----------+----+
|1464440400| 1  |
|1464444000| 2  |
|1464447600| 3  |
|1464552000| 4  |
+----------+----+

PHP / MYSQL:

$q1 = SELECT cntr FROM tableName WHERE dateTime = 'yourDate';

while($result = mysql_fetch_array($q1)){

    $cntr = $result['cntr']+1;//add 1 to get the next count in table

    $q2 = SELECT dateTime FROM tableName WHERE cntr = '$cntr';

        $data = mysql_fetch_array($q2);

        echo $data['dateTime']; //result
}