Как избежать изменения даты и времени при обновлении после отображения один раз?

#php #codeigniter #datetime

#php #codeigniter #дата и время

Вопрос:

У меня есть функция, которая получает текущее время даты и добавляет к нему 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 .

Спасибо.

Комментарии:

1. Ваш реальный вопрос — как я могу сделать переменную постоянной на разных страницах? И ответ заключается в использовании сеансов. Итак, прочитайте, как использовать сеансы CI.

2. Вы можете использовать сеансы, как указано в @TimBrownlaw, или, если это время не зависит от сеанса, а связано с заказом, вы можете сохранить будущую дату в базе данных вместе с остальными данными заказа. В чем именно заключается ваш случай?

3. Время на самом деле связано с заказом. Даже если я использую сеанс, значение все равно меняется, когда я вручную перезагружаю страницу. Перезагрузка предназначена только для тестирования, так как нет автоматического обновления страниц. Я просто хочу зафиксировать начальную дату. Я чувствую, что сохранение в базе данных было бы лучшим вариантом, если другого способа нет. Спасибо

Ответ №1:

Сначала в вашем контроллере запустите сеанс с первой строки 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>
  

Как я могу сделать переменную постоянной на разных страницах?

Ответ №2:

Сначала вам нужно добавить эту строку в первую строку ваших 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)»

Я надеюсь, что мое решение решит вашу проблему

Комментарии:

1. использование session_start() (и все, что не является встроенным управлением сеансами Codeigniter) на самом деле не очень хорошая идея. Хотя, по сути, ваша рекомендация верна, я бы использовал библиотеку сеансов codeigniter, чтобы избежать проблем

2. Моя реализация выполнена без использования каких-либо глобальных переменных, и сеанс уже используется для отображения корзины, хотя я ценю ответ