可能重复:
PHP DateTime ::修改添加和减去月份
我有一个开始日期(即2011-01-30),并希望增加1个月.
问题在于定义一个月是什么.所以,如果我使用以下代码:
$d1 = DateTime::createFromFormat('Y-m-d H:i:s', '2011-01-30 15:57:57');
$d1->add(new DateInterval('P1M'));
echo $d1->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:2011-03-02 15:57:57
问题是,我需要它使用以下规则:
在PHP中有一个常见的功能可以做到这一点,还是我必须自己编写代码?也许我只是缺少一个参数或什么!?
pau*_*sm4 11
除了DateInterval之外,您还有其他几种选择.
以下是使用的示例strtotime():
http://www.brightcherry.co.uk/scribbles/php-adding-and-subtracting-dates/
// Subtracting days from a date
$date = "1998-08-14";
$newdate = strtotime ( '-3 day' , strtotime ( $date ) ) ;
$newdate = date ( 'Y-m-j' , $newdate );
echo $newdate;
Run Code Online (Sandbox Code Playgroud)
...
// Subtracting months from a date
$date = "1998-08-14";
$newdate = strtotime ( '-3 month' , strtotime ( $date ) ) ;
$newdate = date ( 'Y-m-j' , $newdate );
echo $newdate;
Run Code Online (Sandbox Code Playgroud)
以下是一些链接DateInterval:
问:究竟怎么做,你定义一个"月"?
Def#1):"月"是"月" - 无论#/天
Def#2):"月"是30天(例如)
Def#3):"月"是后续月份的第一个星期一之间的#/天
等等
问:你的"定义"究竟是什么?
Kas*_*asi 11
它似乎没有现成的功能,所以我自己写了.这应该可以解决我的问题.无论如何,谢谢您的回答和评论.如果您发现一些错误,请在评论中提供.
此函数计算在添加一些月后我将结束的月份和年份.然后它检查日期是否正确.如果没有,我们的情况是当天不在目标月份,所以我们采取月中的最后一天.用PHP 5.3.10测试.
<?php
$monthToAdd = 1;
$d1 = DateTime::createFromFormat('Y-m-d H:i:s', '2011-01-30 15:57:57');
$year = $d1->format('Y');
$month = $d1->format('n');
$day = $d1->format('d');
$year += floor($monthToAdd/12);
$monthToAdd = $monthToAdd%12;
$month += $monthToAdd;
if($month > 12) {
$year ++;
$month = $month % 12;
if($month === 0)
$month = 12;
}
if(!checkdate($month, $day, $year)) {
$d2 = DateTime::createFromFormat('Y-n-j', $year.'-'.$month.'-1');
$d2->modify('last day of');
}else {
$d2 = DateTime::createFromFormat('Y-n-d', $year.'-'.$month.'-'.$day);
}
$d2->setTime($d1->format('H'), $d1->format('i'), $d1->format('s'));
echo $d2->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43523 次 |
| 最近记录: |