PHP检查日期是否在当月的第一天和最后一天之间

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

检查$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 $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);
 }