我从Stackoverflow获取此代码并稍微更改它以适应今天的日期.
我想检查今天是否适合两个日期.但这不起作用.我错过了什么?
$paymentDate = date('d/m/Y');
echo $paymentDate; // echos today!
$contractDateBegin = date('d/m/Y', '01/01/2001');
$contractDateEnd = date('d/m/Y', '01/01/2015');
if ($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd)
{
echo "is between";
}
else
{
echo "NO GO!";
}
Run Code Online (Sandbox Code Playgroud)
小智 141
这是你的代码的正确答案..只需使用strtotime() php函数
$paymentDate = date('Y-m-d');
$paymentDate=date('Y-m-d', strtotime($paymentDate));
//echo $paymentDate; // echos today!
$contractDateBegin = date('Y-m-d', strtotime("01/01/2001"));
$contractDateEnd = date('Y-m-d', strtotime("01/01/2012"));
if (($paymentDate >= $contractDateBegin) && ($paymentDate <= $contractDateEnd)){
echo "is between";
}else{
echo "NO GO!";
}
Run Code Online (Sandbox Code Playgroud)
lut*_*ens 31
您无法比较日期字符串.改为使用PHP的DateTime
对象是个好习惯:
$paymentDate = new DateTime(); // Today
echo $paymentDate->format('d/m/Y'); // echos today!
$contractDateBegin = new DateTime('2001-01-01');
$contractDateEnd = new DateTime('2015-01-01');
if (
$paymentDate->getTimestamp() > $contractDateBegin->getTimestamp() &&
$paymentDate->getTimestamp() < $contractDateEnd->getTimestamp()){
echo "is between";
}else{
echo "NO GO!";
}
Run Code Online (Sandbox Code Playgroud)
小智 14
如果时间重要:
$paymentDate = strtotime(date("Y-m-d H:i:s"));
$contractDateBegin = strtotime("2014-01-22 12:42:00");
$contractDateEnd = strtotime("2014-01-22 12:50:00");
if($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd) {
echo "is between";
} else {
echo "NO GO!";
}
Run Code Online (Sandbox Code Playgroud)
基于 luttken 的回答。以为我会添加我的扭曲:)
function dateIsInBetween(\DateTime $from, \DateTime $to, \DateTime $subject)
{
return $subject->getTimestamp() > $from->getTimestamp() && $subject->getTimestamp() < $to->getTimestamp() ? true : false;
}
$paymentDate = new \DateTime('now');
$contractDateBegin = new \DateTime('01/01/2001');
$contractDateEnd = new \DateTime('01/01/2016');
echo dateIsInBetween($contractDateBegin, $contractDateEnd, $paymentDate) ? "is between" : "NO GO!";
Run Code Online (Sandbox Code Playgroud)
您将日期作为字符串进行比较,这是行不通的,因为比较是按字典顺序进行的。这与对文本文件进行排序时的问题相同,其中一行20
会出现在一行之后100
,因为内容不被视为数字,而是被视为 ASCII 代码序列。此外,创建的日期都是错误的,因为您使用的是字符串格式字符串,其中需要时间戳(第二个参数)。
相反,您应该比较DateTime
对象的时间戳,例如:
$paymentDate = date_create();
$contractDateBegin = date_create_from_format('d/m/Y', '01/01/2001');
$contractDateEnd = date_create_from_format('d/m/Y', '01/01/2015');
Run Code Online (Sandbox Code Playgroud)
然后您现有的条件将正常工作。
归档时间: |
|
查看次数: |
192256 次 |
最近记录: |