【问题标题】:Can't get last day of June with PHP无法使用 PHP 获得六月的最后一天
【发布时间】:2012-08-03 13:15:51
【问题描述】:

评论是我看到的输出。救命!

echo date("Y-m-t", strtotime("2012-07-31 -1 month")); //2012-07-31
echo date("Y-m-t", strtotime("2012-07-31 -2 month")); //2012-05-31

7 月有 31 天,所以不能按 8 月 1 日来处理,对吧?即使是这样,第二行也应该起作用。对吧?!

谢谢!

【问题讨论】:

  • 您可能在夏令时导致代码中出现错误 - 或者今年是闰年 - 其中一个 PHP 函数可能存在一些不完善的计算。跨度>
  • 参见here .. 注意:不建议将此函数用于数学运算。最好在 PHP 5.3 及更高版本中使用 DateTime::add() 和 DateTime::sub(),或者在 PHP 5.2 中使用 DateTime::modify()。

标签: php codeigniter date


【解决方案1】:

这里发生的情况是,“7-31”减去一个月得出“6-31”,转换为“7-1”,即要求该月的最后一天,得出“7 -31 英寸。

当您想要计算月份时,几乎总是(如果不是总是)使用 mktime 来构建时间会更好。

$month = 7;
echo date("Y-m-t", mktime(0, 0, 0, $month - 1, 1, 2012)); //2012-06-30

请注意,在 mktime 中进行月份数学运算时,始终将“1”作为日期。或者真的任何东西,只要它是 28 或更低。

【讨论】:

  • 谢谢,安德鲁,这是有道理的。那时我可能会切换到那个,但目前应该这样做是有意义的:echo date("Y-m-t", strtotime("2012-07-31 -1 month -15 days"));。我想不出会失败的实例。但是,话又说回来,我也不得不发布这个问题;)
【解决方案2】:

你可以这样做:

$month  = date('m') ;
$day    = date('d') ;
$year   = date('Y') ;
// ----
$current    = mktime( 0, 0, 0, $month , $day, $year);
$yesterday  = mktime( 0, 0, 0, $month , $day-1, $year);
$tomorrow   = mktime( 0, 0, 0, $month , $day+1, $year);
// ----
echo '<pre>Current Day: '.date('Y-m-d', $current).'</pre>';
echo '<pre>Day Before: '.date('Y-m-d', $yesterday).'</pre>';
echo '<pre>Day After: '.date('Y-m-d', $tomorrow).'</pre>';

如果您正在寻找 7 月的最后一天:

$july = mktime( 0, 0, 0, 8, 1-1, 2012);
// Last Day of July: 2012-07-31
echo '<pre>Last Day of July: '.date('Y-m-d', $july).'</pre>';

使用mktime,只需输入八月的第一天并减去一天。

【讨论】:

  • 这完全无法回答 OP 的问题。显然 OP 正试图从日期中减去几个月。问题是从 31 天的月份减去 30 天或更少的月份。
  • @Matt OP 的问题是六月的最后一天(如他们的主题所述)。他们试图通过减去几个月来做到这一点。我的回答显示了一种方法,即从任何给定月份的第一天减去一天,以准确获得该月的最后一天。如果真正的问题是“为什么我的方法不起作用”,那么是的,我不明白这个问题。本来可以要求澄清的,所以我可以更新我的答案。但我不同意我的回答至少不能回答 OP 的部分问题。
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 2011-01-30
  • 2012-04-01
  • 1970-01-01
  • 2013-12-11
  • 2013-04-27
  • 2015-03-26
相关资源
最近更新 更多