[英]PHP date format issue using strtotime()
我在用
$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
,其中January是0,Feb是1,依此类推。因此,没有必要专门减去1个月,而实际上是从month整数中减去1 。 最后,结果字符串不应该早于1个月,而是实际上是相同的日期,使用JS Date Object
样式表示。 我相信@vprimachenko在下面的答案是一个很好的解决方案。 如果在我的OP中不清楚,我深表歉意。
谢谢!
你可能会用
$datee = explode('-',$date);
if($datee[1]-- < 0) {
$datee[1]=12;
$datee[0]--;
}
$jsdate = implode(', ',$datee);
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/29/2011。 如果将输入更改为2012年3月29日,您会看到它返回2012年2月29日,因为2012年是a年。 使用7/31/2011之类的东西也会发生同样的情况。 6月只有30天,因此7月31日减去一个月就是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月所没有的3月的其余日子以及leap年,并在30天之后的31天中执行类似的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.