PHP如果给定的日期是日期范围

时间:2016-02-29 13:47:07

标签: php

我正在尝试确定给定日期$my_date(动态)是this weeklast weekthis monthlast month还是{{1} }

last 3 months

没有显示任何内容。我该如何解决?

4 个答案:

答案 0 :(得分:2)

我修改了你的代码,如果需要进一步修改你的IF语句,但是日期创建按预期工作,你得到DateTime对象,你可以做任何你喜欢的事情:

$my_date = "29/02/2016";

//this week,last week, this month, last month and last 3 months
$scheduled_job =  DateTime::createFromFormat('d/m/Y', $my_date);

//test your date
//echo $scheduled_job->format('Y-m-d');

$this_week = new DateTime(date('Y-m-d',strtotime("first day this week")));
$last_week = new DateTime(date('Y-m-d',strtotime("last week monday")));
$this_month = new DateTime(date('Y-m-d',strtotime("first day this month")));
$last_month = new DateTime(date('Y-m-d',strtotime("first day last month")));
$last_three_month = new DateTime(date('Y-m-d',strtotime("first day -3 month")));


if($scheduled_job > $this_week) {
    echo 1;
}

if($scheduled_job < $this_week and $scheduled_job >= $last_week) {
    echo 2;
}

if($scheduled_job > $this_month) {
    echo 3;
}

if($scheduled_job < $this_month and $scheduled_job >= $last_month) {
    echo 4;
}

if($scheduled_job > $last_three_month) {
    echo 5;
}

答案 1 :(得分:1)

永远不会定义

$dateJob(if语句的第三和第五)。

也许你的意思是$scheduled_job

此外,尝试以不同的方式格式化$my_date,因为如果您使用/作为分隔符,则表示m/d/y

$my_date = "29-02-2016";

答案 2 :(得分:1)

只需执行str_replace斜杠的'/'

$my_date = str_replace('/', '.', '29/02/2016');

因为strtotime文档说:

  

通过查看,可以消除m / d / y或d-m-y格式的日期   各个组件之间的分隔符:如果分隔符是a   斜线(/),然后是美国m / d / y;而如果   separator是短划线( - )或点(。),然后是欧洲d-m-y格式   假定。

答案 3 :(得分:1)

我首先使用DateTime类。

$date = new \DateTime();

$thisMonday = $date->modify('first day of this week'); // to get the current week's first date
$lastMonday = $date->modify('last monday'); // to get last monday
$firstDayThisMonth = $date->modify('first day of this month'); // to get first day of this month
$firstDayLastMonth = $date->modify('first day of this month'); // to get first day of last month
$firstDayThreeMonthAgo = new \DateTime($firstDayThisMonth->format('Y-m-d') . ' - 3 months'); // first day 3 months ago

$my_date = str_replace('/', '.', "29/02/2016");
$scheduled_job = new \DateTime($my_date);

// Now you can do the checks.