我需要以YYYY-MM-DD的格式获得一个月的第一天和最后一天,只给出月份和年份。有一个好的,简单的方法吗?
答案 0 :(得分:63)
$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()。
答案 1 :(得分:6)
第一天永远是YYYY-MM-01,不是吗?示例:date("Y-M-d", mktime(0, 0, 0, 8, 1, 2008))
最后一天是下个月第一天的前一天:
$date = new DateTime("2008-09-01");
$date->modify("-1 day");
echo $date->format("Y-m-d");
答案 2 :(得分:3)
该月的第一天始终为1。 所以它将成为
YYYY-MM-01
最后一天可以计算为:
<?php
$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
echo "There was $num days in August 2003";
?>
答案 3 :(得分:2)
date ('Y-m-d', mktime(0,0,0,MM,01,YYYY));
最后有点棘手,但并不多。
date ('Y-m-d', mktime(0,0,0,MM + 1,-1,YYYY));
如果我没记错我的PHP日期......
**编辑 - Gah!被打败了大约一百万次......
Pat编辑:
最后一天应该是
date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1
答案 4 :(得分:2)
<?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);
?>
答案 5 :(得分:0)
顺便说一下@ZombieSheep解决方案
date ('Y-m-d', mktime(0,0,0,$MM + 1,-1,$YYYY));
不起作用
date ('Y-m-d', mktime(0,0,0,$MM + 1,0,$YYYY)); // Day zero instead of -1
当然,@MichałSłaby接受的解决方案是最简单的。
答案 6 :(得分:0)
只是为了确认我没有错过任何松散的结局:
$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));
答案 7 :(得分:0)
使用PHP执行此操作的最简单方法是
$dateBegin = strtotime("first day of last month");
$dateEnd = strtotime("last day of last month");
echo date("MYDATEFORMAT", $dateBegin);
echo "<br>";
echo date("MYDATEFORMAT", $dateEnd);
或上周
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");
}
或去年
$dateBegin = strtotime("1/1 last year");
$dateEnd = strtotime("12/31 this year");
答案 8 :(得分:0)
尝试此操作以获取当月的天数:
$numdays = date('t', mktime(0, 0, 0, $m, 1, $Y));
答案 9 :(得分:0)
实施例;我想得到当月的第一天和最后一天。
$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-01-09日期运行此项时,第一个和最后一个值将按顺序执行;
2015-01-01
2015-01-31
测试。
答案 10 :(得分:0)
来自标记为重复的here(get next month last day),因此我无法在那里添加评论,但人们可以从那里得到错误的答案。
纠正下个月的最后一天:
echo ((new DateTime(date('Y-m').'-01'))->modify('+1 month')->format('Y-m-t'));
在下个月的第一天纠正:
echo ((new DateTime(date('Y-m').'-01'))->modify('+1 month')->format('Y-m-01'));
这样的代码将从1月开始提供3月,因此不会出现预期。
echo ((new DateTime())->modify('+1 month')->format('Y-m-t'));