In PHP, is there an easy way to get the first and last date of a month?
我只需要给出月份和年份,就可以获取格式为YYYY-MM-DD的月份的第一天和最后一天。 有没有一种简便的好方法?
1 2
| $first = date('Y-m-d', mktime(0, 0, 0, $month, 1, $year));
$last = date('Y-m-t', mktime(0, 0, 0, $month, 1, $year)); |
请参阅PHP文档中的date()。
第一天总是YYYY-MM-01,不是吗?示例:date("Y-M-d", mktime(0, 0, 0, 8, 1, 2008))
最后一天是下个月第一天的前一天:
1 2 3
| $date = new DateTime("2008-09-01");
$date->modify("-1 day");
echo $date->format("Y-m-d"); |
该月的第一天始终为1。
所以它将成为
最后一天可以计算为:
1 2 3 4
| <?php
$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
echo"There was $num days in August 2003";
?> |
1 2 3 4 5
| <?php
echo"Month Start -" . $monthStart = date("Y-m-1") ."<br/>";
$num = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y"));
echo"Monthe End -" . $monthEnd = date("Y-m-".$num);
?> |
好,首先很容易。
1
| date ('Y-m-d', mktime(0,0,0,MM,01,YYYY)); |
最后有点棘手,但不多。
1
| date ('Y-m-d', mktime(0,0,0,MM + 1,-1,YYYY)); |
如果我正确记得我的PHP日期资料...
**编辑-加!被殴打约一百万次...
帕特编辑:
最后一天应该是
1
| date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1 |
从这里(昨天下个月获取)标记为重复,因此我无法在此处添加评论,但是人们可以从那里得到错误的答案。
更正下个月的最后一天:
1
| echo ((new DateTime(date('Y-m').'-01'))->modify('+1 month')->format('Y-m-t')); |
在下个月的第一天更正一个:
1
| echo ((new DateTime(date('Y-m').'-01'))->modify('+1 month')->format('Y-m-01')); |
像这样的代码将从一月开始提供三月,所以这不是可以预期的。
echo ((new DateTime())->modify('+1 month')->format('Y-m-t'));
例;我想获得本月的第一天和最后一天。
1 2 3 4 5
| $month = (int) date('F');
$year = (int) date('Y');
date('Y-m-d', mktime(0, 0, 0, $month + 1, 1, $year)); //first
date('Y-m-d', mktime(0, 0, 0, $month + 2, 0, $year)); //last |
例如,当您在2015年1月9日运行此代码时,第一个和最后一个值将是顺序的;
经过测试。
尝试此操作以获取当月的天数:
1
| $numdays = date('t', mktime(0, 0, 0, $m, 1, $Y)); |
用PHP做到这一点最简单的方法是
1 2 3 4 5 6
| $dateBegin = strtotime("first day of last month");
$dateEnd = strtotime("last day of last month");
echo date("MYDATEFORMAT", $dateBegin);
echo"";
echo date("MYDATEFORMAT", $dateEnd); |
或最后一周
1 2 3 4 5 6 7
| if (date('N', time()) == 7) {
$dateBegin = strtotime("-2 weeks Monday");
$dateEnd = strtotime("last Sunday");
} else {
$dateBegin = strtotime("Monday last week");
$dateEnd = strtotime("Sunday last week");
} |
还是去年
1 2
| $dateBegin = strtotime("1/1 last year");
$dateEnd = strtotime("12/31 this year"); |
只是为了确认我没有错过任何结局:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $startDay = 1;
if (date("m") == 1) {
$startMonth = 12;
$startYear = date("Y") - 1;
$endMonth = 12;
$endYear = date("Y") - 1;
}
else {
$startMonth = date("m") - 1;
$startYear = date("Y");
$endMonth = date("m") - 1;
$endYear = date("Y");
}
$endDay = date("d") - 1;
$startDate = date('Y-m-d', mktime(0, 0, 0, $startMonth , $startDay, $startYear));
$endDate = date('Y-m-d', mktime(0, 0, 0, $endMonth, $endDay, $endYear)); |
顺便说一句@ZombieSheep解决方案
1
| date ('Y-m-d', mktime(0,0,0,$MM + 1,-1,$YYYY)); |
不起作用应该是
1
| date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1 |
当然@Micha吗?萨比的公认解决方案是最简单的。
|