我有一个看起来像这样的PHP DateTime对象...
$startdate = '01/05/2019';
$mydate = DateTime::createFromFormat("d/m/Y", $startdate);
是否可以将此日期提前到每月的最近17日?开始日期是动态的,因此我无法对其进行硬编码。
有人举榜吗?
答案 0 :(得分:3)
在日期中增加一天,直到找到下一个17日。
<?php
$startdate = '2019-01-05';
$interval = new DateInterval('P1D'); // define interval as 1 day
$date = new DateTime($startdate);
while($date->format('j') != 17){
$date->add($interval);
}
echo $date->format('Y-m-d') . "\n";
输出:2019-01-17
答案 1 :(得分:2)
这里的诀窍是找到适当月份的第一个日期,然后加上16天。
这些modify()
expressions很有帮助。
$mydate->modify ("first day of this month")->modify("+ 16 days");
$mydate->modify ("first day of next month")->modify("+ 16 days");
接下来,您可以确定要哪个:
if ($mydate->format("d") > 17) ...
像这样将它们放在一起:
$mydate = DateTime::createFromFormat("d/m/Y", $startdate);
if ($mydate->format("d") > 17) {
$mydate->modify ("first day of this month")->modify("+ 16 days");
}
else {
$mydate->modify ("first day of next month")->modify("+ 16 days");
echo $mydate->format('Y-m-d') . "<br/>\r\n";
并且,当您测试这种事情时,请务必在12月和2月使用几天进行测试,以确保年累计和月累计逻辑正确运行。