日期半月不工作

时间:2017-10-01 14:33:11

标签: php date

我试着这样做

date('Y-m-d', strtotime('0.5 months'));

但它给我的日期 1970-01-01

预计日期 2017-10-15

所以问题是为什么半月不工作?

3 个答案:

答案 0 :(得分:3)

我想你忘记了Plus singn

请尝试使用以下

date('Y-m-d', strtotime('+ 0.5 months'));

date('Y-m-d', strtotime('+ 15 days')); (如果你转换天数) 希望能帮到你

答案 1 :(得分:3)

您不能在strtotime() relative date format中使用非整数:

  

数字[+ - ]?[0-9] +

要完成这项工作,您可以使用2 weeks15 days(请注意,这两个日期会返回不同的日期,因为2周是14天):

<?php
echo date("Y-m-d", strtotime("2 weeks")).PHP_EOL; // 2017-10-15
echo date("Y-m-d", strtotime("15 days")).PHP_EOL; // 2017-10-16
echo date("Y-m-d", strtotime("+.5 months")).PHP_EOL; // not valid, returns 1970-01-01

Demo

答案 2 :(得分:1)

我正在寻找仅使用php相对时间半个月的解决方案。先前答案的问题在于,它们没有考虑每月的天数波动。考虑一下:

$time = strtotime('last day of feb 2019');
$time = strtotime('-2 weeks', $time);
$formatted_date = date('m/d', $time);

输出为02/14,恰好在该月中旬。但是呢:

$time = strtotime('last day of jan');
$time = strtotime('-2 weeks', $time);
$formatted_date = date('m/d', $time);

输出为01/17,该时间与本月中旬(i / 1true)(01 / 15.5)间隔1-2天,具体取决于您向上舍入还是向下舍入。

另外,根据strtotime('+0.5 months')的答案,我知道已经解决了,但这是摘自PHP文档:

  

数字是一个整数数字;如果给出了十进制数字,则点(或逗号)很可能被解释为定界符。例如,“ + 1.5小时”的解析方式类似于“ +1 5小时”,而不是“ +1小时+30分钟”。

我已经尝试了很多措辞,以期达到月中真正的水平,并且得出的结论是,仅相对格式是不可能的。所以这是我的解决方案:

<?php
function middleOfMonth( $time ) {
    $n = cal_days_in_month( CAL_GREGORIAN, date('n', $time), date('Y', $time) );
    return $n / 2;
}

$time = strtotime('jan next year');
$middle = middleOfMonth( $time ); // result is 15.5
echo( ceil( $middle ) ); // outputs 16
echo( floor( $middle ) ); // outputs 15