Даты говорят, что мы 1 апреля и забываем 29, 30, 31 - PullRequest
1 голос
/ 29 марта 2019

Я работаю с некоторыми датами в PHP, и проблема в том, что сегодня php возвращает мне, что мы 1 апреля.Я действительно не знаю, почему

Пытался изменить код для получения даты.

$actArray= array();
for($i=0;$i<30;$i++){
    $date = new DateTime(date("Y-m-d"));
    $date->modify("-".$i." days");
    $date->modify("-1 months");
    $actArray[date("Y-m-d",time()-60*60*24*$i)]=array("display"=>$date->format("Y, m, d"),"MaxPlayers"=>0,"PlayersOn"=>0,"Register"=>0);
}

Alerdy попытался

for($i=0;$i<30;$i++){
    $date = new DateTime(date("Y-m-d",time()-60*60*24*$i));
    $date->sub(new DateInterval("P1M"));
    $actArray[date("Y-m-d",time()-60*60*24*$i)]=array("display"=>$date->format("Y, m, d"),"MaxPlayers"=>0,"PlayersOn"=>0,"Register"=>0);
}

Тот же результат

Кажется, он пропустил 3 дня.

Вывод: 2019, 03, 01 2019, 02, 28 2019, 02, 27 2019, 02, 26 2019, 02, 25 2019 ..... 2019,02, 28

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Почему вы не используете функцию date ()?Возвращает местное время / дату.

Вы можете получить сегодняшнюю дату:

echo date("Y, M, d");

для более подробной информации: функция даты php

https://www.guru99.com/php-date-functions.html хорошая ссылка

0 голосов
/ 29 марта 2019

Не каждый месяц имеет 30 дней, а некоторые - даже меньше.

Не во всех днях есть 24 часа.

В DateTime / strtotime есть так много опций, что вам никогда не придётся придумыватьвремя вычисляет самостоятельно.

Рассмотрим этот код:

$today = new DateTime('today');
echo $today->format('Y-m-d') . PHP_EOL;
$today->sub(DateInterval::createFromDateString('30 days'));
echo $today->format('Y-m-d') . PHP_EOL;

$today = new DateTime('today');
echo $today->format('Y-m-d') . PHP_EOL;
$today->sub(DateInterval::createFromDateString('1 month'));
echo $today->format('Y-m-d') . PHP_EOL;

Вывод:

2019-03-29
2019-02-27
2019-03-29
2019-03-01

Видите, есть разница между "30 днями" и "1 месяцем""...

Другой пример:

$today = new DateTime('today');
echo $today->format('Y-m-d') . PHP_EOL;
for($i = 0; $i < 5; $i ++) {
    $today->add(DateInterval::createFromDateString('1 days'));
    echo $today->format('Y-m-d') . PHP_EOL;
}

2019-03-29
2019-03-30
2019-03-31
2019-04-01
2019-04-02
2019-04-03
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...