如何找到该日期的最后一天?

Mit*_*ran 353 php date

如何在PHP中获取本月的最后一天?

鉴于:

$a_date = "2009-11-23"
Run Code Online (Sandbox Code Playgroud)

我想要2009-11-30; 给定

$a_date = "2009-12-23"
Run Code Online (Sandbox Code Playgroud)

我想2009-12-31.

Dom*_*ger 762

t返回给定日期的月份天数(请参阅文档date):

$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));
Run Code Online (Sandbox Code Playgroud)

  • 这将在2038年之后失败.因此,应该使用DateTime函数而不是strtotime.以下代码将在没有2038年问题的情况下工作:$ d = new DateTime('2009-11-23'); echo $ d-> format('Ymt'); (93认同)
  • @Mugunth如果你在未来24年处理日期,你可能会在2038年之前遇到问题,但是,服务器已经转移到64位架构,这将给我们大约2920亿年来纠正问题. (71认同)
  • 使用`DateTime`,您可以执行以下操作:`(new DateTime('2009-11-23')) - > modify('last day of')` (10认同)
  • 回音日期("Ymt",strtotime($ a_date)); 工作得很好. (5认同)
  • 在程序中 -> $date1 = $year.'-'.$month; $d = date_create_from_format('Ym',$date1); $last_day = date_format($d, 't'); (2认同)
  • @victor,您应该将您的评论作为答案,唯一的原因是它会产生可读且可理解的代码。显然使用 Ymt 也可以,但是谁不看文档就知道“t”是什么? (2认同)

Mug*_*nth 108

使用strtotime()的代码将在2038年后失败.(如此线程中的第一个答案所示)例如,尝试使用以下代码:

$a_date = "2040-11-23";
echo date("Y-m-t", strtotime($a_date));
Run Code Online (Sandbox Code Playgroud)

它将给出答案:1970-01-31

因此,应该使用DateTime函数而不是strtotime.以下代码将在没有2038年问题的情况下运行:

$d = new DateTime( '2040-11-23' ); 
echo $d->format( 'Y-m-t' );
Run Code Online (Sandbox Code Playgroud)

  • 这假设您运行的是32位版本的PHP. (16认同)
  • 我将在71岁时退休,所以对我来说不是问题!j/k但严肃的人 - 注意这个警告! (12认同)
  • 截至 2018 年,`strtotime` 代码给了我这个结果:**2040-11-30** (3认同)
  • @Adam 现在是这样,不确定你检查时是否是这样。http://php.net/manual/de/function.strtotime.php#refsect1-function.strtotime-notes (2认同)

Han*_*sir 97

我知道这有点晚了但我认为PHP 5.3+通过使用DateTime类有更优雅的方法:

$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

  • 在一行中:$ date = new DateTime('本月的最后一天'); (19认同)
  • 你可能想添加$ date-> modify('本月的最后一天') - > setTime(23,59,59); 如果您想在时间重要的情况下使用此dateTime进行比较.(这给你这个月的最后一秒) (5认同)
  • 如果您想或至少尝试我要求您做的事情,您会看到_this month_表示DateTime对象中月份的值而不是系统的日期.如果您无法输入/运行php代码,这可能有所帮助:http://sandbox.onlinephpfunctions.com/code/290b69fffcf3bc12d684479254c714ee6089b092 (5认同)
  • @John你错了.最后一天是使用$ date对象而不是系统日期计算的.通过改变第一行来尝试它:`$ date = DateTime :: createFromFormat('m/d/Y','1/10/2014');` (4认同)
  • 这有效:`$ date = new DateTime('2020-2。最后一天');` (2认同)
  • @CesarB 这就是所谓的“相对格式”。您可以在这里阅读更多相关信息:https://www.php.net/manual/en/datetime.formats.relative.php (2认同)

MPV*_*MPV 69

还有内置的PHP函数cal_days_in_month()

"此功能将返回指定日历的一年中的天数." http://php.net/manual/en/function.cal-days-in-month.

echo cal_days_in_month(CAL_GREGORIAN, 11, 2009); 
// = 30
Run Code Online (Sandbox Code Playgroud)

  • 这个答案比使用 strtoTime 更简单和合适。我没有看到任何缺点。到顶部你去。 (3认同)

kal*_*azy 24

这应该工作:

$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());

$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());

$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());

echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';

echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';

echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
Run Code Online (Sandbox Code Playgroud)


nik*_*org 17

您可以为下个月的第一天创建日期,然后使用 strtotime("-1 day", $firstOfNextMonth)


Moh*_*eer 14

试试这个,如果您使用的是PHP 5.3+,

$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

要查找下个月的最后日期,请修改如下,

 $date->modify('last day of 1 month');
 echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

等等..


joh*_*ith 13

有什么不对 - 对我来说最优雅的是使用 DateTime

我不知道我没有看到DateTime::createFromFormat,单行

$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");
Run Code Online (Sandbox Code Playgroud)

  • 我同意。此解决方案(DateTime类)比使用旧的datetime函数要好得多。 (2认同)

小智 9

你的解决方案在这里..

$lastday = date('t',strtotime('today'));
Run Code Online (Sandbox Code Playgroud)


Max*_*Max 8

如今,如果您有月份和年份,则 DateTime 可以非常方便地执行此操作

$date = new DateTime('last day of '.$year.'-'.$month);
Run Code Online (Sandbox Code Playgroud)

从另一个 DateTime 对象将是

$date = new DateTime('last day of '.$otherdate->format('Y-m'));
Run Code Online (Sandbox Code Playgroud)


eay*_*kin 7

如果您对PHP DateTime 使用Carbon API扩展,则可以使用以下内容获取该月的最后一天:

$date = Carbon::now();
$date->addMonth();
$date->day = 0;
echo $date->toDateString(); // use toDateTimeString() to get date and time 
Run Code Online (Sandbox Code Playgroud)


Fai*_*sal 6

您可以通过几种方式找到每月的最后一天。但是简单地可以使用PHP strtotime()date()函数来完成此操作,我想您的最终代码将如下所示:

$a_date = "2009-11-23";
echo date('Y-m-t',strtotime($a_date));
Run Code Online (Sandbox Code Playgroud)

现场演示

但是,如果您使用的是PHP> = 5.2,我强烈建议您使用新的DateTime对象。例如下面的例子:

$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

现场演示

另外,您可以使用自己的函数来解决此问题,如下所示:

/**
 * Last date of a month of a year
 *
 * @param[in] $date - Integer. Default = Current Month
 *
 * @return Last date of the month and year in yyyy-mm-dd format
 */
function last_day_of_the_month($date = '')
{
    $month  = date('m', strtotime($date));
    $year   = date('Y', strtotime($date));
    $result = strtotime("{$year}-{$month}-01");
    $result = strtotime('-1 second', strtotime('+1 month', $result));

    return date('Y-m-d', $result);
}

$a_date = "2009-11-23";
echo last_day_of_the_month($a_date);
Run Code Online (Sandbox Code Playgroud)


jos*_*sef 5

PHP DateTime 的Carbon API 扩展

Carbon::parse("2009-11-23")->lastOfMonth()->day;
Run Code Online (Sandbox Code Playgroud)

或者

Carbon::createFromDate(2009, 11, 23)->lastOfMonth()->day;
Run Code Online (Sandbox Code Playgroud)

将返回

30
Run Code Online (Sandbox Code Playgroud)