计算-1个月时的Php天数错误

时间:2017-03-30 07:55:48

标签: php date error-handling

当我在PHP日期计算中遇到问题时,我感到很惊讶。

this.http.get('https://api.skypicker.com/flights?' + bodyStringSerialized)

但在

serialize(obj, prefix) {
var str = [], p;
for(p in obj) {
  if (obj.hasOwnProperty(p)) {
    var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
    str.push((v !== null && typeof v === "object") ?
      this.serialize(v, k) :
      k + "=" + v);
  }
}
return str.join("&");
}

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

您可以查看:http://php.net/manual/en/function.strtotime.php(解释和评论)

  

注意:

     

不建议使用此函数进行数学运算。最好在PHP 5.3及更高版本中使用DateTime :: add()和DateTime :: sub(),或在PHP 5.2中使用DateTime :: modify()。

答案 1 :(得分:0)

为什么不利用DateTime相对格式并简单地使用:

$date = new DateTime('first day of last month');
echo $date->format('Y-m-d');

答案 2 :(得分:0)

在你的情况下,你计算二月份。 2月份只有28天吧?

正如几篇博客中所述,strtotime()在下个月不存在的日子里解决了“-1个月”(“上个月”)问题,与其他实现(如MySQL)不同。

<?php
echo date( "Y-m-d", strtotime( "2017-01-31 -1 month" ) ); // PHP:  2016-12-31
echo date( "Y-m-d", strtotime( "2017-01-31 -2 month" ) ); // PHP:  2016-12-01
?>

如果你按照这样计算,你就得到了正确的答案:

$add = '- 28 days';
echo date('Y-m-01', strtotime($add))."<br/>"; 

$add = '-1 month';
echo date('Y-m-01', strtotime($add))."<br/>";