在PHP中,有一种简单的方法可以获得一个月的第一个和最后一个日期吗?

时间:2008-09-04 12:12:46

标签: php

我需要以YYYY-MM-DD的格式获得一个月的第一天和最后一天,只给出月份和年份。有一个好的,简单的方法吗?

11 个答案:

答案 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'));