Добавить ‘x’ количество часов к дате

#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"));