我试着这样做
date('Y-m-d', strtotime('0.5 months'));
但它给我的日期 1970-01-01
预计日期 2017-10-15
所以问题是为什么半月不工作?
答案 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 weeks
或15 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
答案 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