我在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> 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 } ?>
答案 0 :(得分:1)
您可以使用以下结构:
$newdate = date('Y-m-d', strtotime("+30 days"));
您可以在每天需要的时候替换30号码
答案 1 :(得分:1)
在此while循环的运行时期间,您无法确定所有事件时间是什么。因此,您无法选择一个。它们正在流入(据我所知)。 您必须先拥有所有数据,才能选择下一个数据。
因此您有3个选项:
通过反转输出(考虑按日期时间排序),您可以保留变量$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;
[...]
}
全部运行意味着,您有一个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'
}
(不推荐)
每次处理事件时,您都可以创建一个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
}