nosajcchio. Ответов: 1

Время назад на 1 день вперед?


- Привет! Итак, у меня есть эта настройка системы, где она извлекает строку [created_at] в таблице "видео"и отображает ее в разделе "время назад". Проблема в том, что он не отображается правильно, что приводит меня в замешательство. Время в базе данных правильное и совпадает со временем в windows, но после преобразования с помощью функции timeAgo оно отображается почти так, как будто оно задерживается на 9 часов. Я опубликую свой код, а также скриншот времени в базе данных. Заранее благодарю вас за помощь, и я надеюсь, что это была глупая ошибка.

ПРИМЕР ИЗОБРАЖЕНИЯ:
Imgur: магия интернета[^]

Что я уже пробовал:

/* * * * * * * * * * * *
*  Index.php
* * * * * * * * * * * * */

 $curenttime= $row['created_at']; //which displays 2020-08-14 00:32:06 for the 1/only post submited 
 
$time_ago = strtotime($curenttime);

    echo timeAgo($time_ago);


/* * * * * * * * * * * *
*  Returns Time Ago
* * * * * * * * * * * * */
function timeAgo($time_ago){
$cur_time 	= time();
$time_elapsed = $cur_time - $time_ago;
$seconds 	= $time_elapsed ;
$minutes 	= round($time_elapsed / 60 );
$hours 		= round($time_elapsed / 3600);
$days 		= round($time_elapsed / 86400 );
$weeks 		= round($time_elapsed / 604800);
$months 	= round($time_elapsed / 2592000 );
$years 		= round($time_elapsed / 31536000 );
// Seconds
if($seconds <= 60){
	echo "$seconds seconds ago";
}
//Minutes
else if($minutes <=60){
	if($minutes==1){
		echo "one minute ago";
	}
	else{
		echo "$minutes minutes ago";
	}
}
//Hours
else if($hours <=24){
	if($hours==1){
		echo "an hour ago";
	}else{
		echo "$hours hours ago";
	}
}
//Days
else if($days <= 7){
	if($days==1){
		echo "yesterday";
	}else{
		echo "$days days ago";
	}
}
//Weeks
else if($weeks <= 4.3){
	if($weeks==1){
		echo "a week ago";
	}else{
		echo "$weeks weeks ago";
	}
}
//Months
else if($months <=12){
	if($months==1){
		echo "a month ago";
	}else{
		echo "$months months ago";
	}
}
//Years
else{
	if($years==1){
		echo "one year ago";
	}else{
		echo "$years years ago";
	}
}
}

1 Ответов

Рейтинг:
2

Sandeep Mewara

Я думаю, что ключ к разгадке заключается в том, что это всегда разница в 9 часов. Не может ли это быть из-за настройки часового пояса в вашей системе?

Я проверил и ... Функция PHP time() [^] предоставляет текущее время в виде Unix timestamp в МСК. (пояс)

Я считаю, что это было бы причиной этого.

Цитата:
Функция time() возвращает текущее время в количестве секунд с момента начала эпохи Unix (1 января 1970 года 00:00:00 GMT).


Я считаю, что ваше время, сохраненное в базе данных, не соответствует тому же формату. Пожалуйста, проверьте и отрегулируйте свою логику соответствующим образом. Либо приведите оба к одному формату (рекомендуется), либо скорректируйте разницу.

Ссылаться: РНР: время - ручное[^]

Чтобы изменить часовой пояс, например:
<?php
date_default_timezone_set("UTC");
echo "UTC:".time();
echo "<br>";

date_default_timezone_set("Europe/Helsinki");
echo "Europe/Helsinki:".time();
echo "<br>";
?>


nosajcchio.

Спасибо Вам за ваш ответ! Я сделал то, о чем вы просили, но без особого успеха. Я вошел в Настройки Apache php.ini и изменил 'date.timezone =America/New_York', а также добавил 'date_default_timezone_set("America/New_York"); но все, что они сделали, это сократили время с "9 часов назад" до "3 часа назад" во время обновления.