#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. Моя реализация выполнена без использования каких-либо глобальных переменных, и сеанс уже используется для отображения корзины, хотя я ценю ответ