php - на час раньше, чем задано - PullRequest
8 голосов
/ 27 февраля 2012

У меня проблема здесь ..

Предположим, у меня есть такой тип даты и времени.


$date = strtotime($date);

Мне нужно, чтобы это было преобразовано в формат метки времени Unix, но один часраньше .. Я пытался


$date = strtotime($date-86400)

, но мне показалось, что это неправильно.Он вернул 0, когда я прокрался в стол.

Как правильно этого добиться?

Спасибо.

Ответы [ 5 ]

6 голосов
/ 27 февраля 2012

strtotime даст вам метку времени unix вашей даты.Из этой отметки времени вы затем вычитаете свой час:

$date = strtotime($date) - 3600; // 3600 = 60 * 60

Если вы звоните strtotime($date - 3600), это похоже на получение времени для -3600 (например, strtotime(-3600)), которое не имеет смысла, потому что strtotime ожидает строку какПервый аргумент.

5 голосов
/ 27 февраля 2012

Вы можете сделать:


$testDateStr = strtotime($date);
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr));

Надеюсь, это поможет

3 голосов
/ 27 февраля 2012

86400 секунд - это один день, а не один час.

Вывод strtotime () - это метка времени Unix. 3600 секунд раньше - это отметка времени минус один час. Итак:

$date = strtotime($somestring);

$hourago = $date - 3600;

Или, в зависимости от исходного формата $ somestring:

$hourago = strtotime($somestring . " - 1 hour");

И не забудьте о date_default_timezone_set ()

1 голос
/ 20 апреля 2017

Никто еще не предлагал DateTime объектное решение, так что я буду. Это самый современный метод обработки даты и времени, не требующий вычисления минут и секунд.

Мне всегда нравится заходить в какое-то объявление о часовом поясе, чтобы сделать вещи более определенными. Переход на летнее время обычно связан с манипуляциями с датой и временем, но, вероятно, в этом случае все в порядке. Не стесняйтесь изменять часовой пояс для вашего случая.

Ссылки на руководства PHP:

Код (включая форматированное время для сравнения) Демо-ссылка :

$now=new DateTime('NOW UTC');

$now_stamp=$now->getTimestamp();
$formatted_now=$now->format("Y-m-d H:i:s");
echo "$now_stamp ($formatted_now)\n";

$hour_ago=$now->modify('-1 hour');
$hour_ago_stamp=$hour_ago->getTimestamp();
$formatted_hour_ago=$hour_ago->format("Y-m-d H:i:s");
echo "$hour_ago_stamp ($formatted_hour_ago)";

Выход:

1492687193 (2017-04-20 11:19:53)
1492683593 (2017-04-20 10:19:53)
1 голос
/ 27 февраля 2012

Попробуйте этот запрос

$query= "insert into yourTable(otherValues, date) 
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour))

Используйте DATE_ADD, чтобы вставить значение даты, которое на 1 час меньше текущего времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...