当前位置: 首页 > 面试题库 >

一种获取两个日期之间的月数的优雅方法?

孙莫希
2023-03-14
问题内容

假设我在变量中有两个日期,例如

$date1 = "2009-09-01";
$date2 = "2010-05-01";

我需要获取介于$date2$date1$date2 >= $date1)之间的月份数。即我需要得到8

有没有一种方法可以通过使用日期函数来获取它,或者我必须爆炸字符串并进行一些计算?

非常感谢


问题答案:

对于PHP> = 5.3

$d1 = new DateTime("2009-09-01");
$d2 = new DateTime("2010-05-01");

var_dump($d1->diff($d2)->m); // int(4)
var_dump($d1->diff($d2)->m + ($d1->diff($d2)->y*12)); // int(8)

DateTime ::
diff返回一个DateInterval对象

如果您未使用PHP 5.3或更高版本运行,我想您将不得不使用unix时间戳:

$d1 = "2009-09-01";
$d2 = "2010-05-01";

echo (int)abs((strtotime($d1) - strtotime($d2))/(60*60*24*30)); // 8

但这不是很精确(每月并不总是30天)。

最后一件事:如果这些日期来自您的数据库,请使用DBMS而不是PHP来完成此工作。

编辑: 如果您不能使用DateTime :: diff或RDBMS,则此代码应该更精确:

$d1 = strtotime("2009-09-01");
$d2 = strtotime("2010-05-01");
$min_date = min($d1, $d2);
$max_date = max($d1, $d2);
$i = 0;

while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) {
    $i++;
}
echo $i; // 8


 类似资料:
  • 问题内容: 我有两个这样的表: 表格1 表2 我想从 Table1中 选择并插入 Table2中 。 例如: 在表1中,我有这个 在表2中,我想要这个 带有样本数据的表结构 问题答案: 感谢您的架构。它使处理您的问题变得容易。我对您的架构进行了一些更改以利用auto_increment 在这里,我在emp_leave_daywise表上添加了唯一约束,因为id整数上的主键不能确保记录不重复。 em

  • 问题内容: 我在一个项目中工作,我在Date中有两种类型。我想计算这两个日期之间的周数。日期可以是不同的年份。有什么好的解决方案吗? 我试图通过Joda-time来实现这一点,这在其他主题中已得到建议。 我不熟悉该库,但我尝试执行以下操作: 但这是完全错误的…有什么建议吗? 问题答案: 乔达时间很简单:

  • 问题内容: 它给出以下内容: 但是我想获得下个月的定义,该怎么办? 问题答案: 表达方式 给。我们期望这两个值都指向每月的最后几天。如果将1天添加到值中,我们将获得下个月的第一天, 会给我们1个月的预期时间。因此,让我们检查是否有一个月的最后两天,在这种情况下,我们要返回第二天的年龄间隔。在其他情况下,我们将返回原始值的年龄间隔: 一些例子:

  • 我有两次约会。一个是以YYYYMMDD格式从其他应用程序的表中检索的,第二个日期是本地时间,我需要这两个日期之间的天数/月/年。 我试过了 但这给了我一些乱七八糟的数字。 变量$t=Fri Dec31 00:00:00 9999 变量$今天=Wed Feb19 14:40:55 2020 产出:25182094888 有什么想法吗?提前谢谢。

  • 问题内容: 使用标准的mysql函数可以编写查询,该查询将返回两个日期之间的天数列表。 例如,给定2009-01-01和2009-01-13,它将返回一个具有以下值的列表: 编辑:看来我还不清楚。我要生成此列表。我在数据库中存储了值(按日期时间),但希望将它们在左外部联接中汇总到上述日期列表中(我希望这种联接的某些右侧在几天内会为null并将对此进行处理) )。 问题答案: 我将使用此存储过程将所

  • 在Netezza中,我们有一个months_-between函数,它给出两个日期之间的月份:我猜,它首先计算日期之间的天数,然后除以30? 有没有一种方法可以在netezza中编写sql,这样我就可以得到如下整数值:如果两个日期在同一个月内,则返回0。否则返回#个月。i、 e 2015年8月31日和2015年9月01日应返回1,因为它们在不同的月份。 如果我将months_between的o/p转