#php #mysql #time
#php #mysql #время
Вопрос:
у меня есть time data
в базе данных, я записываю время с помощью time()
функции (значение 1551866538) в базе данных, и я хочу записать оставшееся время php на 1 день, но как 24 часа. Я пытаюсь date_diff()
выполнить функцию, но каждый раз получаю ошибку, спасибо за помощь.
$mysqltime = $data->registerdate; // 1551866538
$now = time();
$remainingtime = $now - $mysqltime; // I want show as hour
Комментарии:
1. Где ваш код? Что вы уже пробовали?
2. я добавил свой код.
3. Вы просто пытаетесь отформатировать секунды в часах: минутах?
4. Если разница составит более 24 часов, то вы хотите показать дни?
5. я хочу показать вот так: «Время восстановления 4 часа 21 мин.». По окончании оставшегося времени «Время истекло»
Ответ №1:
Вы также можете использовать DateTime
класс, как показано ниже:
$today = new DateTime('now');
$tomorrow = new DateTime(date('Y-m-d H:i:s', '1551866538'));
$difference = $today->diff($tomorrow);
echo $difference->format('%h hours %i minutes remaining');
Вывод
1 hours 42 minutes remaining
Комментарии:
1. Спасибо, Амит, лучший ответ, я запускаю этот код именно так, как я хочу.
2. Теперь я понял, что это расчетное время, пожалуйста, объясните, как показать оставшееся время на 24 часа назад.
3. Хорошо, я решаю эту проблему. Я заменил этот код следующим образом.. $tomorrow = новая дата-время(date(‘Y-m-d H: i:s’, ‘1551866538’ 60 * 60 * 24));
Ответ №2:
<?php
// Declare and define two dates
$date1 = strtotime("2016-06-01 22:45:00");
$date2 = strtotime("2018-09-21 10:44:01");
// Formulate the Difference between two dates
$diff = abs($date2 - $date1);
// To get the year divide the resultant date into
// total seconds in a year (365*60*60*24)
$years = floor($diff / (365*60*60*24));
// To get the month, subtract it with years and
// divide the resultant date into
// total seconds in a month (30*60*60*24)
$months = floor(($diff - $years * 365*60*60*24)
/ (30*60*60*24));
// To get the day, subtract it with years and
// months and divide the resultant date into
// total seconds in a days (60*60*24)
$days = floor(($diff - $years * 365*60*60*24 -
$months*30*60*60*24)/ (60*60*24));
// To get the hour, subtract it with years,
// months amp; seconds and divide the resultant
// date into total seconds in a hours (60*60)
$hours = floor(($diff - $years * 365*60*60*24
- $months*30*60*60*24 - $days*60*60*24)
/ (60*60));
// To get the minutes, subtract it with years,
// months, seconds and hours and divide the
// resultant date into total seconds i.e. 60
$minutes = floor(($diff - $years * 365*60*60*24
- $months*30*60*60*24 - $days*60*60*24
- $hours*60*60)/ 60);
// To get the minutes, subtract it with years,
// months, seconds, hours and minutes
$seconds = floor(($diff - $years * 365*60*60*24
- $months*30*60*60*24 - $days*60*60*24
- $hours*60*60 - $minutes*60));
// Print the result
printf("%d years, %d months, %d days, %d hours, "
. "%d minutes, %d seconds", $years, $months,
$days, $hours, $minutes, $seconds);
?>
Вывод:
2 years, 3 months, 21 days, 11 hours, 59 minutes, 1 seconds
Комментарии:
1. Идея более или менее правильная, но если разница очень мала, она покажет 0 лет, 0 месяцев….
2. Вы можете установить условие if для проверки 0 лет / месяцев.
3. я не отформатировал время, мои данные в базе данных 1551866538, я знаю, что должен преобразовать эти данные, но я этого не сделал, а ваш код очень длинный, он должен быть очень коротким таким образом.
Ответ №3:
$mysqltime = $data->registerdate; // 1551866538
$now = time();
$remainingtime = $now - $mysqltime;
echo $hours = round($remainingtime / (60 * 60)); // hours
Комментарии:
1. При этом не будут отображаться минуты. Оно будет округлено до ближайшего часа.
2. я не могу понять переменную $datediff.
3. неправильный код echo $ hours = round($remainingtime / (60 * 60));