繁体   English   中英

使用strtotime()的PHP日期格式问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM