#php #laravel
#php #Дата #дата-время #dateadd #час
Вопрос:
В настоящее время php возвращает текущую дату / время следующим образом:
$now = date("Y-m-d H:m:s");
Что я хотел бы сделать, так это иметь новую переменную, $new_time
равную $now $hours
, где $hours
это количество часов в диапазоне от 24 до 800.
Есть предложения?
Комментарии:
1. strtotime() php.net/manual/en/function.strtotime.php
2. Я сомневаюсь, что это то, чего вы хотите. Я хочу, чтобы вы заметили, что «m» в «H: m: s» представляет месяц в цифре. Я полагаю, вы хотели написать «H: i: s». Пожалуйста, перепроверьте
Ответ №1:
Вы можете использовать что-то вроде strtotime()
функции, чтобы добавить что-то к текущей временной метке. $new_time = date("Y-m-d H:i:s", strtotime(' 5 hours'))
.
Если вам нужны переменные в функции, вы должны использовать двойные кавычки, тогда как strtotime(" {$hours} hours")
, как бы лучше вы ни использовали strtotime(sprintf(" %d hours", $hours))
тогда.
Комментарии:
1. Это работает, но если я заменю ‘5’ переменной, это не будет работать должным образом.
strtotime(' $hours hours')
2. Не имеете ли вы в виду $new_time = date(«Y-m-d H: i: s», strtotime(‘ 5 часов’)? m — месяц, i — минуты…
3.Для меня использование
{$hours}
strtotime(" {$hours} hours")
не сработало. Я заменил{$hours}
на'.$hours.'
. Поэтому вместо {} я использовал `. Надеюсь, это поможет кому-то нуждающемуся
Ответ №2:
Другим решением (объектно-ориентированным) является использование DateTime::add
Пример:
<?php
$now = new DateTime(); //now
echo $now->format('Y-m-d H:i:s'); // 2021-09-11 01:01:55
$hours = 36; // hours amount (integer) you want to add
$modified = (clone $now)->add(new DateInterval("PT{$hours}H")); // use clone to avoid modification of $now object
echo "n". $modified->format('Y-m-d H:i:s'); // 2021-09-12 13:01:55
Комментарии:
1. Небольшой тип здесь, $date-> format, вероятно, должно быть $ now-> format
2. Хотя я ценю ссылку на документацию PHP, было бы неплохо описать, что делают параметры в вашем примере. Вы подключились к
DateTime::add
функции, которая принимает параметрDateInterval
, в документеDateTime
которого затем указано, что он ссылается на форматы, поддерживаемые в,,конструкторе, который затем указывает на «Форматы даты и времени», которые затем ссылаются на «Форматы времени», «Форматы даты», «Составные форматы» и «Относительные форматы». Кажется, ни в одном из них не упоминаетсяP
, хотя я вполне мог пропустить это на всех этих страницах. Я понимаю, чтоT
это означает время,H
часы, ноP
?….3. @s.co.tt php.net/manual/en/dateinterval.construct.php Формат начинается с буквы P, обозначающей период. Каждый период продолжительности представлен целочисленным значением, за которым следует обозначение периода. Если длительность содержит элементы time, этой части спецификации предшествует буква T.
4. Спасибо! Я разобрался с этим, и, пожалуйста, обратите внимание, что меня раздражали документы PHP, а не плакат. Но я рад, что ваш ответ здесь для потомков!
Ответ №3:
Вы можете использовать strtotime() для достижения этой цели:
$new_time = date("Y-m-d H:i:s", strtotime(' 3 hours', $now)); // $now 3 hours
Комментарии:
1. @RichardDesLonde Вероятно, потому, что все скопировали пример кода операционной системы. 🙂
2. У меня это не сработало, ответил Родриго Празим.
3. Обнаруженное неверно сформированное числовое значение — не работает
Ответ №4:
Исправить
Вы можете использовать strtotime() для достижения этой цели:
$new_time = date("Y-m-d H:i:s", strtotime(' 3 hours', strtotime($now))); // $now 3 hours
Ответ №5:
Вы также можете использовать время в стиле unix для вычисления:
$newtime = time() ($hours * 60 * 60); // hours; 60 mins; 60secs
echo 'Now: '. date('Y-m-d') ."n";
echo 'Next Week: '. date('Y-m-d', $newtime) ."n";
Комментарии:
1. плохая идея, проблемы с високосными годами, високосными секундами, переходом на летнее время и т.д.
2. @Dagon нет, это будет вычислено правильно.
3. С помощью этого метода учитываются високосные годы, переход на летнее время можно установить при повторном использовании даты
Ответ №6:
Я использую это, работает классно.
//set timezone
date_default_timezone_set('GMT');
//set an date and time to work with
$start = '2014-06-01 14:00:00';
//display the converted time
echo date('Y-m-d H:i',strtotime(' 1 hour 20 minutes',strtotime($start)));
Ответ №7:
Хм … ваши минуты должны быть исправлены… ‘i’ — это минуты. Не месяцы. 🙂 (У меня тоже была такая же проблема с чем-то.
$now = date("Y-m-d H:i:s");
$new_time = date("Y-m-d H:i:s", strtotime(' 3 hours', $now)); // $now 3 hours
Ответ №8:
для добавления 2 часов к «сейчас»
$date = new DateTime('now 2 hours');
или
$date = date("Y-m-d H:i:s", strtotime(' 2 hours', $now)); // as above in example
или
$now = new DateTime();
$now->add(new DateInterval('PT2H')); // as above in example
Ответ №9:
Вы можете попробовать lib Ouzo goodies и сделать это свободно:
echo Clock::now()->plusHours($hours)->format("Y-m-d H:m:s");
API допускают несколько операций.
Ответ №10:
Для заданной даты-времени вы можете добавить дни, часы, минуты и т.д. Вот несколько примеров:
$now = new DateTime();
$now->add(new DateInterval('PT24H')); // adds 24 hours
$now->add(new DateInterval('P2D')); // adds 2 days
PHP: DateTime::добавить вручную https://www.php.net/manual/fr/datetime.add.php
Ответ №11:
$to = date('Y-m-d H:i:s'); //"2022-01-09 12:55:46"
$from = date("Y-m-d H:i:s", strtotime("$to -3 hours")); // 2022-01-09 09:55:46
Комментарии:
1. Хотя этот фрагмент кода может решить проблему, он не объясняет, почему или как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , так как это действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения по кодированию.
Ответ №12:
$date_to_be-added="2018-04-11 10:04:46";
$added_date=date("Y-m-d H:i:s",strtotime(' 24 hours', strtotime($date_to_be)));
Комбинация функций date() и strtotime() сделает свое дело.
Ответ №13:
$now = date("Y-m-d H:i:s");
date("Y-m-d H:i:s", strtotime(" 1 hours $now"));