1个月在PHP中代表多少天?

时间:2011-03-28 19:44:26

标签: php

我看到php有月加法和减法的奇怪问题。

我的问题是:

  • 1个月的天数是否相等?
  • 如果是,这是所有编程语言的通用标准吗?

    举几个例子:

    echo date('Y-m-d',strtotime('2011-03-31 -1 months')); //2011-03-03
    echo date('Y-m-d',strtotime('2011-03-30 -1 months')); //2011-03-02
    echo date('Y-m-d',strtotime('2011-03-29 -1 months')); //2011-03-01
    echo date('Y-m-d',strtotime('2011-03-28 -1 months')); //2011-02-28
    
  • 2 个答案:

    答案 0 :(得分:9)

    从您的示例中看,它似乎从月份部分减去1,然后更正非法日期。你的第二个例子:

    2011-03-30 - 1 month = 2011-02-30。这个日期不存在,因为2011年2月只有28天。 30 - 28 = 2,因此它将其作为下个月的第二天。

    但是,我还没有找到关于此的文档。

    无论哪种方式,假设我是对的,你的问题的答案是没有,“1个月”没有(天数)等于(常数)等价物,这取决于输入。

    答案 1 :(得分:3)

    The way strtotime parses date information在这里非常有价值。

    你想要的想要的是上个月的第一天,对吗?

    好吧,你可以链接许多这些相关命令。例如,来自PHP交互式shell:

    php > $d = date_create('2011-03-28 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
    2011-02-01 00:00:00
    php > $d = date_create('2011-03-29 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
    2011-02-01 00:00:00
    php > $d = date_create('2011-03-30 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
    2011-02-01 00:00:00
    php > $d = date_create('2011-03-31 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
    2011-02-01 00:00:00
    php > $d = date_create('2011-04-01 first day -1 month'); if($d) echo $d->format('Y-m-d H:i:s'); else echo "Failed.";
    2011-03-01 00:00:00
    

    first day询问当月的第一天。要求-1 month在同一天发送到上个月。因为我们已经回到了本月的第一天,所以这将始终按预期工作。