我正在使用
$jsdate = date("Y, m, d", strtotime('-1 month', (strtotime($date))));
从
转换我的约会2011-03-28
to
2011, 02, 28
问题是这会产生不可预测的结果。例如今天我得到了
2011-03-28
converted to
2011, 02, 28 // OK
AND
2011-03-29
to
2011, 03, 01 // not OK!
有谁知道这里有什么问题吗?我想知道由于-1 month
而计算是否不准确。
有没有办法从1
中的m
中简单地减去...date("Y, m, d", ...
?
更多信息:
我的数据需要格式化为JavaScript Date Object
,其中1月为0,2月为1,等等。因此,无需专门减去1个月,但实际上从月份整数中减去1 。最后,结果字符串不应该提前1个月,但实际上是相同的日期,使用JS Date Object
样式表示。我相信@vprimachenko的答案是一个很好的解决方案。如果我的OP中不清楚,我道歉。
谢谢!
答案 0 :(得分:1)
你可以使用
$datee = explode('-',$date);
if($datee[1]-- < 0) {
$datee[1]=12;
$datee[0]--;
}
$jsdate = implode(', ',$datee);
答案 1 :(得分:0)
strtotime可能以意想不到的方式工作,但它是合乎逻辑的
strtotime('-1 months',strtotime('2011-03-29') // is 2011-02-29
date('Y-m-d','2011-02-29'); //gets converted to the next real date
这是一种解决方法 http://www.phpreferencebook.com/tips/fixing-strtotime-1-month/
答案 2 :(得分:0)
本身的计算并不准确。没有2/29/2011。如果您将输入更改为3/29/2012,您将看到它返回2012年2月29日,因为2012年是闰年。使用类似7/31/2011的东西也会发生同样的情况。 6月只有30天,所以7月31日减1个月就是7月1日(因为6月31日不存在)。
您可以提取月份,减去1并重新制作日期,但这会导致尝试生成不存在的日期。
如果您确实需要上个月的相应日期,您可能需要对以下内容进行if语句,以使日期回滚到2月的最后一天:
$jsdate = date("Y, m, d", strtotime('-1 month', (strtotime($date))));
if($month == '3') {
$jsdate = date("Y, m, d", strtotime('-1 day', (strtotime($jsdate))));
}
您还必须考虑2月份没有的三月剩余时间以及闰年,并在30天后的31天内做类似的事情。