PHP检查两个日期之间的日期
我从Stackoverflow获得了这段代码,并对其进行了轻微更改,以处理今天的日期 我想看看今天是否正好在两个日期之间。但这是行不通的。 我错过了什么PHP检查两个日期之间的日期,php,date,Php,Date,我从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 ($pay
$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!";
}
$paymentDate=日期('d/m/Y');
echo$paymentDate;//回声今天!
$contractDateBegin=日期('d/m/Y','01/01/2001');
$contractDateEnd=日期('d/m/Y','01/01/2015');
如果($paymentDate>$contractDateBegin&$paymentDate<$contractDateEnd)
{
回音“在中间”;
}
其他的
{
回声“不行!”;
}
您正在将日期作为字符串进行比较,这将不起作用,因为比较是按字典进行的。这与对文本文件进行排序时的问题相同,其中一行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');
您的现有条件将正常工作。您无法比较日期字符串。使用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!";
}
$paymentDate=new DateTime();//今天
echo$paymentDate->格式('d/m/Y');//回声今天!
$contractDateBegin=新日期时间('2001-01-01');
$contractDateEnd=新日期时间('2015-01-01');
如果(
$paymentDate->getTimestamp()>$contractDateBegin->getTimestamp()&&
$paymentDate->getTimestamp()<$contractDateEnd->getTimestamp()){
回音“在中间”;
}否则{
回声“不行!”;
}
直接使用
$paymentDate = strtotime(date("d-m-Y"));
$contractDateBegin = strtotime("01-01-2001");
$contractDateEnd = strtotime("01-01-2015");
然后比较就可以了,因为您的01-01-2015适用于strotime手册中规定的PHP的32位日期范围
编辑:使用=
计算今天的日期
这是代码的正确答案。只需使用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!";
}
$paymentDate=日期('Y-m-d');
$paymentDate=日期('Y-m-d',标准时间($paymentDate));
//echo$paymentDate;//回声今天!
$contractDateBegin=日期('Y-m-d',标准时间('01/01/2001');
$contractDateEnd=日期(Y-m-d),标准时间(2012年1月1日);
如果($paymentDate>=$contractDateBegin)和($paymentDate如果小时数很重要:
$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!";
}
$paymentDate=strottime(日期(“Y-m-d H:i:s”);
$contractDateBegin=strottime(“2014-01-22 12:42:00”);
$contractDateEnd=strotTime(“2014-01-22 12:50:00”);
如果($paymentDate>$contractDateBegin&$paymentDate<$contractDateEnd){
回音“在中间”;
}否则{
回声“不行!”;
}
基于luttken的回答。我想我应该添加我的扭曲:)
函数dateIsInBeween(\DateTime$from、\DateTime$to、\DateTime$subject)
{
返回$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 DateIsInBeween($contractDateBegin,$contractDateEnd,$paymentDate)“?”介于“:“不可以!”;
另一个解决方案是考虑写入YMD的日期。< /P>
以这种“格式”编写,比较日期非常容易
$paymentDate = date('Ymd'); // on 4th may 2016, would have been 20160504
$contractBegin = 20010101;
$contractEnd = 20160101;
echo ($paymentDate >= $contractBegin && $paymentDate <= $contractEnd) ? "Between" : "Not Between";
$paymentDate=date('Ymd');//2016年5月4日,应该是20160504年
$contractBegin=20010101;
$contractEnd=20160101;
echo($paymentDate>=$contractBegin&&$paymentDate如果您需要动态的括号日期
$todayStr = date('Y-m-d');
$todayObj=date('Y-m-d', strtotime($todayStr));
$currentYrStr = date('Y');
$DateBegin = date('Y-m-d', strtotime("06/01/$currentYrStr"));
$DateEnd = date('Y-m-d', strtotime("10/01/$currentYrStr"));
if (($todayObj > $contractDateBegin) && ($paymentDate < $contractDateEnd)){
$period="summer";
}else{
$period="winter";
}
$todayStr=date('Y-m-d');
$todayObj=日期('Y-m-d',标准时间($todayStr));
$currentYrStr=日期('Y');
$DateBegin=date('Y-m-d',strottime('06/01/$currentYrStr');
$DATEND=日期('Y-m-d',标准时间('10/01/$CurrentYRST');
如果($todayObj>$contractDateBegin)和($paymentDate<$contractDateEnd)){
$period=“summer”;
}否则{
$period=“冬季”;
}
另一种解决方案(假设您知道日期格式始终是YYYY/MM/DD和前导零)是max()和min()函数。我认为如果所有其他答案都假设yyyy-mm-dd格式,并且如果您希望确保文件夹按日期顺序排序,则这是文件系统中文件夹的常见命名约定,那么这也没关系
正如其他人所说,给定可以比较字符串的数字顺序,不需要strotime()函数
$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!";
}
示例:
$biggest = max("2018/10/01","2018/10/02");
优点是你可以在里面放更多的日期,而不仅仅是比较两个
$biggest = max("2018/04/10","2019/12/02","2016/03/20");
要确定某个日期是否介于两个日期之间,您可以进行比较
min()和max()的结果
它不适用于任何其他日期格式,但对于该格式,它可以。不需要转换为秒,也不需要日期函数。上述方法很有用,但它们不是完全证明,因为如果时间介于12:00 AM/PM和01:00 AM/PM之间,它会给出错误。尽管时间介于这两个时间之间,它仍会返回“禁止”。
以下是相同的代码:
$time = '2019-03-27 12:00 PM';
$date_one = $time;
$date_one = strtotime($date_one);
$date_one = strtotime("+60 minutes", $date_one);
$date_one = date('Y-m-d h:i A', $date_one);
$date_ten = strtotime($time);
$date_ten = strtotime("-12 minutes", $date_ten);
$date_ten = date('Y-m-d h:i A', $date_ten);
$paymentDate='2019-03-27 12:45 AM';
$contractDateBegin = date('Y-m-d h:i A', strtotime($date_ten));
$contractDateEnd = date('Y-m-d h:i A', strtotime($date_one));
echo $paymentDate;
echo "---------------";
echo $contractDateBegin;
echo "---------------";
echo $contractDateEnd;
echo "---------------";
$contractDateEnd='2019-03-27 01:45 AM';
if($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd)
{
echo "is between";
}
else
{
echo "NO GO!";
}
$time='2019-03-27 12:00 PM';
$date_one=$time;
$date\u one=strottime($date\u one);
$date\u one=strottime(“+60分钟,$date\u one”);
$date\u one=日期('Y-m-d h:i A',$date\u one);
$date\u ten=strottime($time);
$date\u ten=strottime(“-12分钟,$date\u ten”);
$date\u ten=日期('Y-m-d h:i A',$date\u ten);
$paymentDate='2019-03-27上午12:45';
$contractDateBegin=日期('Y-m-d h:i A',标准时间($date_ten));
$contractDateEnd=日期('Y-m-d h:i A',标准时间($date_one));
echo$paymentDate;
回声“---------”;
echo$contractDateBegin;
回声“---------”;
echo$contractDateEnd;
回声“---------”;
$contractDateEnd='2019-03-27 01:45 AM';
如果($paymentDate>$contractDateBegin&$paymentDate<$contractDateEnd)
{
回音“在中间”;
}
其他的
{
回声“不行!”;
}
在这里您将得到输出“禁止”
,因为12:45>01:45
要在这段时间内获得正确的输出日期,请确保将的“AM”
值从01:00 AM
转换为12:00 AM
格式
$time = '2019-03-27 12:00 PM';
$date_one = $time;
$date_one = strtotime($date_one);
$date_one = strtotime("+60 minutes", $date_one);
$date_one = date('Y-m-d h:i A', $date_one);
$date_ten = strtotime($time);
$date_ten = strtotime("-12 minutes", $date_ten);
$date_ten = date('Y-m-d h:i A', $date_ten);
$paymentDate='2019-03-27 12:45 AM';
$contractDateBegin = date('Y-m-d h:i A', strtotime($date_ten));
$contractDateEnd = date('Y-m-d h:i A', strtotime($date_one));
echo $paymentDate;
echo "---------------";
echo $contractDateBegin;
echo "---------------";
echo $contractDateEnd;
echo "---------------";
$contractDateEnd='2019-03-27 01:45 AM';
if($paymentDate > $contractDateBegin && $paymentDate < $contractDateEnd)
{
echo "is between";
}
else
{
echo "NO GO!";
}
function betweenDates($cmpDate,$startDate,$endDate){
return (date($cmpDate) > date($startDate)) && (date($cmpDate) < date($endDate));
}
function get_format($df) {
$str = '';
$str .= ($df->invert == 1) ? ' - ' : '';
if ($df->y > 0) {
// years
$str .= ($df->y > 1) ? $df->y . ' Years ' : $df->y . ' Year ';
} if ($df->m > 0) {
// month
$str .= ($df->m > 1) ? $df->m . ' Months ' : $df->m . ' Month ';
} if ($df->d > 0) {
// days
$str .= ($df->d > 1) ? $df->d . ' Days ' : $df->d . ' Day ';
}
echo $str;
}
$yr=$year;
$dates=$dor;
$myyear='+'.$yr.' years';
$new_date = date('Y-m-d', strtotime($myyear, strtotime($dates)));
$date1 = new DateTime("$new_date");
$date2 = new DateTime("now");
$diff = $date2->diff($date1);
$paymentDate = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$contractDateBegin = mktime(0, 0, 0, 1, 1, 2001);
$contractDateEnd = mktime(0, 0, 0, 1, 1, 2012);
if ($paymentDate >= $contractDateBegin && $paymentDate <= $contractDateEnd){
echo "is between";
}else{
echo "NO GO!";
}