【问题标题】:How to avoid date time change on refresh after displaying once?如何避免显示一次后刷新日期时间更改?
【发布时间】:2021-02-22 02:29:21
【问题描述】:

我有一个函数可以获取当前日期时间并在控制器中添加 30 分钟。我正在将该数据发送到视图中并显示它。

控制器

public function index(){
$data['time'] = $this->set_time();

$this->load->view('templates/location_header');
$this->load->view('pages/confirmation', $data);
$this->load->view('templates/footer');
}

public function set_time(){
date_default_timezone_set('Asia/Colombo');
$time = date('Y-m-d H:i', strtotime('+30 minute'));

    return $time;
}

查看

<h5 class= "order-time"> Your order will arrive in : <?php echo $time ?></h5>

我的问题是,我可以固定视图中显示的日期/时间,以便每当我刷新时它都会保持在返回的原始日期/时间? 例如,当我第一次加载页面时,返回的日期/时间是2020/11/09 10:30。 如果我在 5 分钟内再次刷新页面,我怎样才能保持时间 2020/11/09 10:30 而不是得到 2020/11/09 10:35

谢谢。

【问题讨论】:

  • 您真正的问题是 - 如何使变量跨页面持久化?答案是使用 Sessions。所以请阅读如何使用 CI Sessions。
  • 您可以按照@TimBrownlaw 所述使用会话,或者,如果此时间不依赖于会话但与订单相关,您可以将未来日期与其余订单数据一起保存到数据库中。你的具体情况是什么?
  • 时间其实和订单有关。即使我使用会话,当我手动重新加载页面时值仍然会改变。重新加载仅用于测试目的,因为没有自动刷新页面。我只是想让初始日期固定。如果没有其他方法,我觉得保存到数据库将是最好的选择。谢谢

标签: php codeigniter datetime


【解决方案1】:

首先,您需要将此行添加到 php 文件的第一行以使用会话

session_start();

那么就可以这样使用会话了

public function index(){
$data['time'] = $this->set_time();

$this->load->view('templates/location_header');
$this->load->view('pages/confirmation', $data);
$this->load->view('templates/footer');
}

public function set_time(){
date_default_timezone_set('Asia/Colombo');
$time = date('Y-m-d H:i', strtotime('+30 minute'));
$_SESSION['time'] = $time;
$_SESSION['start'] = time(); // Taking now logged in time.
// Ending a session in 30 minutes from the starting time.
$_SESSION['expire'] = $_SESSION['start'] + (30 * 60);
    return $time;
}

在你的视野中做这样的事情

<h5 class= "order-time"> Your order will arrive in : 
<?php 
if (time() > $_SESSION['expire']) {
    session_destroy();
    echo $time;
} else {
    echo $_SESSION['time'];
}
?>
</h5>

您可以通过更改“(30 * 60)”来更改您想要坚持的时间

希望我的解决方案能解决你的问题

【讨论】:

  • 使用session_start()(以及任何非原生 Codeigniter 会话管理)并不是一个好主意。虽然本质上您的建议是合理的,但我会使用 codeigniter 的会话库来避免问题
  • 我的实现是在没有使用任何全局变量的情况下完成的,并且会话已经用于显示购物车,尽管我很欣赏这个答案
【解决方案2】:

首先在您的控制器中在 PHP 的第一行启动会话:
session_start();

然后将您的数据存储在会话中,例如:

if( empty($_SESSION['time']) ) {

  $_SESSION['time'] = date('Y-m-d H:i');

}

然后在您的视图中显示如下:
<h5><?php echo $_SESSION['time']; ?></h5>

<h5><?=$_SESSION['time']?></h5>

How can I make a variable persistent across pages?

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2012-03-03
    相关资源
    最近更新 更多