PHP检查日期是否在当月的第一天和最后一天之间
检查$datetest数组以确定设置的日期是否在当月的第一天和最后一天之间。输出错误。诸如“11-08-2014”、“11-8-2014”等日期在输出中是对的,也是错的PHP检查日期是否在当月的第一天和最后一天之间,php,date,Php,Date,检查$datetest数组以确定设置的日期是否在当月的第一天和最后一天之间。输出错误。诸如“11-08-2014”、“11-8-2014”等日期在输出中是对的,也是错的 //get First day of Month //get Last day of Month $first_day_of_month = date('m-01-Y'); $last_day_of_month = date('m-t-Y'); echo "First Day of Month: "; echo $firs
//get First day of Month
//get Last day of Month
$first_day_of_month = date('m-01-Y');
$last_day_of_month = date('m-t-Y');
echo "First Day of Month: ";
echo $first_day_of_month;
echo "<br />";
echo "Last Day of Month: ";
echo $last_day_of_month;
$datetest = array('11-30-2014', '11-31-2014', '11-08-2014', '11-8-2014', '11-9-2014', '11-11-2014', '11-24-2014', '11-1-2014', '10-30-2014', '12-1-2014', '11-1-1997');
echo "<br /><br />";
foreach ($datetest as $datetest) {
if (($datetest >= $first_day_of_month) && ($datetest <= $last_day_of_month)){
echo "$datetest :";
echo " Is in Month!";
echo "<br />";
} else {
echo "$datetest :";
echo "Not in Month!";
echo "<br />";
}
}
//获取月的第一天
//得到月的最后一天
每月第一天=日期(“m-01-Y”);
$last_day_of_month=日期('m-t-Y');
回声“月的第一天:”;
echo$每月第一天;
回声“
”;
回声“月的最后一天:”;
echo$每月最后一天;
$datetest=数组('11-30-2014'、'11-31-2014'、'11-08-2014'、'11-8-2014'、'11-9-2014'、'11-11-2014'、'11-24-2014'、'11-1-2014'、'10-30-2014'、'12-1-2014'、'11-1-1997');
回声“
”;
foreach($datetest作为$datetest){
如果($datetest>=$first\u day\u of_month)&($datetest这是因为date()返回一个字符串。请使用intval()将字符串转换为int
整数比较比字符串比较容易得多。代码的问题在于,您不是在比较日期,而是在比较表示日期的字符串。如果您想这样做,您必须重新格式化日期(以便使用YYYY-mm-dd
等格式),或者,更好的是,您只需要在时间戳中转换日期并进行比较(您可以使用mktime
)执行此操作。$first\u day\u of u month=strotime(日期('Y-m-01');
$last_day_of_month=strotime(日期('Y-m-t 23:59:59');
回声“月的第一天:”;
echo$每月第一天;
回声“
”;
回声“月的最后一天:”;
echo$每月最后一天;
$datetests=数组('2014-11-30','2014-11-31','2014-11-08');
回声“
”;
foreach($datetests作为$datetest){
如果((strotime($datetest)>=$first_day_of u month)&(strotime($datetest)正如@mark91已经告诉您的那样,您现在所做的比较是错误的,因为您实际上是将string
s与string
进行比较,而不是实际日期:
解决问题的最佳方法(如果可能)是首先将日期格式更改为YYYY-mm-dd
,然后在比较值之前使用strotime()
如果更改值不是一个选项,您可以结合使用mktime
来“构建”日期(作为数字)和explode()
来将“您的”格式转换为正确的时间格式,如我为您尝试的示例代码所示
注意:我正在使用带有1
(第一天)和日期('n')
(月天数=等于月最后一天)的mktime()
构建开始和结束日期。有关更多信息,请查看
循环中的脚本将(explode
)格式不良的日期分解成一个数组,然后mktime()
将日期生成回数字日期表示形式(unix时间戳),可用于轻松且正确地比较值
重要部分:
使用以下方法生成第一个
和最后一个
日期:
$first_day_of_month = mktime(0,0,0,date('n'),1,date('Y'));
$last_day_of_month = mktime(23,59,59,date('n'),date('t'),date('Y'));
拆分并生成用于比较的日期:
$split_date = explode("-",$datetest);
$comp_date = mktime(0,0,0,$split_date[0],$split_date[1],$split_date[2]);
比较unix时间戳而不是字符串:
if (($comp_date >= $first_day_of_month) && ($comp_date <= $last_day_of_month)){
如果($comp_date>=$first_day_of u month)&($comp_date您可以通过与一年中的月份进行比较来拆分比较,然后执行有效的日期检查。
如果您不会出现诸如32-08-2014
或0-08-2014
之类的问题,您可以离开日间检查
public function isWithinCurrentMonth($date)
{
$current_month = date('Y-m');
$transaction_date_month = date('Y-m', strtotime($date));
$transaction_day = $date('d', strtotime($date));
$last_day = $date('t');
return $current_month == $transaction_date_month
// day validity check
&& intval($transaction_day) > 0
&& intval($transaction_day) <= intval($last_day);
}
public函数为withincirentmonth($date)
{
$current_month=日期('Y-m');
$transaction_date_month=日期('Y-m',strottime($date));
$transaction_day=$date('d',strottime($date));
$last_day=$date('t');
返回$current\u month==$transaction\u date\u month
//日有效期检查
&&intval($transaction_day)>0
&&intval($transaction_day)t
“给定月份28到31的天数”根据,我想你是想用d
——除非你真的想用它?@Fred ii-t
在查找月份的最后一天时是正确的,因为d
将是当前日期。@JonathanKuhn谢谢Jonathankuh;我不完全确定。我被纠正了。如果日期的格式是Y-m,这是有效的-d
但以当前的格式失败。我同意,但日期的格式应该很容易更改。
if (($comp_date >= $first_day_of_month) && ($comp_date <= $last_day_of_month)){
public function isWithinCurrentMonth($date)
{
$current_month = date('Y-m');
$transaction_date_month = date('Y-m', strtotime($date));
$transaction_day = $date('d', strtotime($date));
$last_day = $date('t');
return $current_month == $transaction_date_month
// day validity check
&& intval($transaction_day) > 0
&& intval($transaction_day) <= intval($last_day);
}