在php中比较日期和下个月的日期

在php中比较日期和下个月的日期,php,Php,我有一个查询,用户填写每个月每天的记录,我想,用户可以编辑/删除他的数据,直到下个月7日 //$fill_date; get data filled date from database $filled_date = date("Y-m-d", strtotime($fill_date)); $datestring = $filled_date.' first day of next month'; $dt=date_create($datestring); $d_mont = $dt->

我有一个查询,用户填写每个月每天的记录,我想,用户可以编辑/删除他的数据,直到下个月7日

//$fill_date; get data filled date from database

$filled_date = date("Y-m-d", strtotime($fill_date));
$datestring = $filled_date.' first day of next month';
$dt=date_create($datestring);
$d_mont = $dt->format('Y-m-07'); // give 7th of next month from data insert date

//get next month from fill date
$f_date = date('Y-m-d' , strtotime($fill_date));
if(strtotime($f_date) <= strtotime($d_mont)) {
  echo strtotime($f_date)." <= ".strtotime($d_mont);
  echo "you can edit";
}
我使用
date()
函数获得了日期之间的差异,但不知道如何比较记录填写日期是否小于下个月的第7天

//$fill_date; get data filled date from database

$filled_date = date("Y-m-d", strtotime($fill_date));
$datestring = $filled_date.' first day of next month';
$dt=date_create($datestring);
$d_mont = $dt->format('Y-m-07'); // give 7th of next month from data insert date

//get next month from fill date
$f_date = date('Y-m-d' , strtotime($fill_date));
if(strtotime($f_date) <= strtotime($d_mont)) {
  echo strtotime($f_date)." <= ".strtotime($d_mont);
  echo "you can edit";
}
/$fill\u日期;从数据库中获取数据填充日期
$filled_date=日期(“Y-m-d”,标准时间($filled_date));
$datestring=$filled_date.‘下个月的第一天’;
$dt=date\u create($datestring);
$d_-mont=$dt->format('Y-m-07');//从数据插入日期起给出下个月的第7天
//从填写日期算起的下个月
$f_日期=日期('Y-m-d',标准时间($fill_日期));

如果(strotime($f_date)在那里,我共享一个查询,该查询可以在7号之前获取数据。如果发现任何问题,请对此查询进行评论

此表包含截至每月7日的最新数据,否则 没有数据

从数据表中选择*,其中日期(curdate())=(curdate()+间隔-1个月);

下面是一个示例代码

$curdate = date('Y-m-d', strtotime($fill_date)); // or time() for current date
$month = date('m', strtotime($curdate));
$year = date('Y', strtotime($curdate));

$nextmonth = ($month == 12)? 1: $month+1;
$date2 = date("Y-m-d", mktime(0, 0, 0, $nextmonth, 7, $year));

你可以将日期与strotime进行比较,因为你已经做了

你要求做的事情非常令人困惑,但我理解,因为我很酷

最好的方法是在数据中设置一个标志,在数据库中有一个名为locked的字段,或者是一个简单的boolen值1=true,0=false

然后在本月7日午夜运行一个cron作业,用0更新本月之前的所有记录,并将其设置为1

编写一个cron作业来完成这一任务是非常简单的,可能需要20行代码

简要示例(psudo代码)

如果你真的想在7号停止,而不是一个月。正如我在评论中所说的,如果我在1号放一个记录,给我整个月+7天,如果我在最后一天做,我只有7天来编辑记录

为此编写一个日期范围查询并不像最初看起来那么简单。因为如果是在7号之前,你必须选择上个月的所有内容和本月的所有内容(告诉当前日期)。但是如果是8号,你必须选择本月初的所有内容告诉当前数据(忽略上个月)。因此,查询将根据当前的日期进行更改

在提取数据后尝试过滤数据似乎是一种浪费,因为您总是会提取更多的记录,用户可以编辑这些记录,然后您还必须完成日期切换

有一个
锁定的
字段的一个优点是,您可以有选择地为用户解锁记录,以便他们可以再次编辑它,只需将1翻转回0。(-注意-我上面概述的cron作业将重新锁定它)关键是,允许他们在不更改代码的情况下编辑特定记录


在我看来,这是最好的方法。

你能分享你的代码示例吗?检查此链接:@Dario检查代码示例。@你的示例代码中的ArunKumar不清楚。你想让用户输入下个月的第一个日期,以便你知道它是哪一个,还是想自动计算出来?@xinaris我从dat获得数据填充日期abase,并希望用户可以编辑或删除他们的记录,直到下个月7日。谢谢回复,但我有问题,如果记录填写日期小于下个月7日,则会显示更新按钮。问题是我不知道您的具体情况,无法正确回答。因此,您的数据库中有记录,例如,直到12月20日ber。您希望能够在12月7日之前编辑数据。但是,如果您的数据库中有12月1日之前的数据,您希望能够在12月1日之前编辑?我解释说,我的数据库中有每个月的数据,每天插入,我希望10月的数据能够编辑到11月7日,依此类推。在12月7日之后下个月,数据将无法编辑。希望您理解我的查询。
    $date = (new DateTime())->modify('first day of this month')->format('Y-m-d');
    $Sql = "UPDATE tbl SET locked = 1 WHERE DATE(date_field) < '{$date}' AND locked=0";
    $DB->query($Sql);
    SELECT * FROM table WHERE locked = 0