日期说我们是4月1日,而忘记了29、30、31日

时间:2019-03-29 19:02:00

标签: php date

我正在用PHP处理一些日期,问题是今天,php让我回到了4月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 个答案:

答案 0 :(得分:1)

为什么不使用date()函数?它返回本地时间/日期。

您可以获得今天的日期:

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

了解更多详细信息:date function php

https://www.guru99.com/php-date-functions.html很好的参考

答案 1 :(得分:0)

并非每个月都有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