如何在PHP中确定日期是否在两个日期之间?

3

我需要知道一个 $paymentDate (31/12/2010) 是否在 $contractDateBegin(01/01/2001) 和 $contractDateEnd(01/01/2012) 之间有效。

日期格式为dd/mm/yyyy!


1
每个变量的格式是什么?它是时间戳吗? - user142162
2
你尝试过任何东西吗?日期的格式是什么? - Wesley Murch
那么,在 $contractDateBegin、$contractDateEnd 和 $paymentDate 中预期的日期格式是什么? - Fredrik
不幸的是,解决方案为:http://pastebin.com/ZPckEWgc - celsowm
3个回答

30

截至PHP 5.3版本:

$paymentDate = DateTime::createFromFormat('d/m/Y', '31/12/2010');
$contractDateBegin = DateTime::createFromFormat('d/m/Y', '01/01/2001');
$contractDateEnd = DateTime::createFromFormat('d/m/Y', '01/01/2012');

if ($paymentDate >= $contractDateBegin && $paymentDate <= $contractDateEnd)
{
  echo "is between\n";
}

根据日期是否包含在内,您可能需要调整使用<=<


有用的小脚本,很实用。谢谢。 - gelviis

3
如果日期格式为YYYYMMDD,您可以检查$paymentDate > $contractDateBegin and $paymentDate < $contractDateEnd来确定是否符合要求。这适用于任何先出现较大格式的数字格式。例如,如果您使用美国日期格式MM/DD/YYYY,则无法使用此方法。

1
可以处理UNIX时间戳和其他各种格式。 - Wesley Murch
@Wesley:尝试让它更清晰,以便适用于大多数时间格式 :) - jberg
基本上,任何可以用数字表示的格式,其中较晚的日期始终大于较早的日期。非常简单。 - Wesley Murch
美国的日期通常是MM/DD/YYYY,但无论如何...这样的检查会不通过。 - Matthew
适用于 date('Y-m-d') 或 YYYY-MM-DD。 - pathfinder

3
$test = strtotime($paymentDate);
if ($test >= strtotime($contractDateBegin) && $test <= strtotime($contractDateEnd))

请注意,如果时间格式为UNIX时间戳,则以下程序将失败。 strtotime() 将返回FALSE。在问题编辑后,似乎这就是他想要的。 - Wesley Murch
strtotime 不起作用,因为它假定任何带有 / 的内容都是以 m/d/Y 格式表示的。日期需要使用破折号才能使 strtotime 正常工作。 - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接