日期以以下格式存储在数据库中
2011-10-2
如果我想将今天的日期与数据库中的日期进行比较,看哪个更大,我该怎么做? br />
$today = date("Y-m-d");
$expire = $row->expireDate //from db
if($today < $expireDate) { //do something; }
但这并不是真的。还有另一种方法吗?
#1 楼
数据库中的日期如下所示:2011-10-2 '等
评论
但是如果它们看起来像是2011-10-02和2012-02-10,则月份比较1> 0,但2011-10-02 <2012-02-10
–dav
13年2月22日在23:26
@Davo,比较在不同的第一个字符处停止。在这种情况下,第四位数字“ 1” <“ 2”,因此您将获得预期的结果。
–马修
13年2月23日在2:25
很抱歉:),没有足够小心。
–dav
13年2月23日在7:51
以下工作将于2016-03-27 11:59:47 ::: 2016-03-14 10:30:00吗?
–shorif2000
16 Mar 29 '16 at 11:01
#2 楼
如果所有日期都在1970年1月1日之后,则可以使用以下方法:可以使用DateTime类:评论
如果我没记错的话,关于1970年1月1日的问题仅适用于Windows上运行的旧版本的PHP,而在Unix上从来就不是问题。
–ÁlvaroGonzález
16年1月25日在12:49
我喜欢这个答案。将日期转换为strtotime()是一个不错的选择
–埃里希·加西亚(ErichGarcía)
17年1月25日在4:30
现在不是“如果您的所有日期都在1970年1月1日之后”还是“在2038年之前”吗?注意我们的y2k38错误。对于较大的日期,strtotime将返回false。 stackoverflow.com/questions/2012589/…
–blamb
18年1月22日在21:23
请注意,DateTime方法是首选方法。该对象可以做的事比strtotime所能做的要多得多。
–Machavity♦
18年8月1日在15:12
新的DateTime('now')也可以检索今天的日期
–布赖斯
4月27日13:33
#3 楼
只是为了补充已经给出的答案,请参见以下示例:$today = new DateTime('');
$expireDate = new DateTime($row->expireDate); //from database
if($today->format("Y-m-d") < $expireDate->format("Y-m-d")) {
//do something;
}
更新:
或简单使用老式date()函数:
if(date('Y-m-d') < date('Y-m-d', strtotime($expire_date))){
//echo not yet expired!
}
评论
日期是一个函数,而不是一个类/构造函数。
– spdionis
2015年4月6日在12:01
@spdionis感谢您的评论,我更改了大写字母以消除可能的混乱。
–.dev
16年1月25日在12:46
#4 楼
我不会用PHP做到这一点。数据库应该知道今天是星期几(例如,使用MySQL-> NOW()),因此在查询中进行比较并返回结果将非常容易,而不会因使用的日期而出现任何问题-类型
SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName
评论
谢谢,但我实际上使用date()我不将今天的日期存储在数据库中
–Sarmen B.
10-10-3在5:26
但是您将expireDate存储在数据库中。将此日期与NOW()比较
–莫勒博士
2010-10-3 7:53
#5 楼
$today = date('Y-m-d');//Y-m-d H:i:s
$expireDate = new DateTime($row->expireDate);// From db
$date1=date_create($today);
$date2=date_create($expireDate->format('Y-m-d'));
$diff=date_diff($date1,$date2);
//echo $timeDiff;
if($diff->days >= 30){
echo "Expired.";
}else{
echo "Not expired.";
}
#6 楼
这是一种以分钟为单位获取两个日期之间差异的方法。// set dates
$date_compare1= date("d-m-Y h:i:s a", strtotime($date1));
// date now
$date_compare2= date("d-m-Y h:i:s a", strtotime($date2));
// calculate the difference
$difference = strtotime($date_compare1) - strtotime($date_compare2);
$difference_in_minutes = $difference / 60;
echo $difference_in_minutes;
评论
问题是要求比较两个日期-您的答案是增加了很多额外的内容(即设置在线/离线状态),而这并不能作为问题的答案。进行比较的答案部分实际上与此处已经存在的答案相同。
– Crazyloonybin
17年12月6日在12:59
更新了问题,我在错误的问题^^中张贴了错误的答案;)与答案不同,只是添加了有关如何比较它们并在几分钟内获得差异的输入。
–锡诺
17年12月6日14:02
由于您进行了更新,因此我删除了我的下一篇投票,现在看起来好多了:)
– Crazyloonybin
17年12月6日在14:05
#7 楼
您可以将日期转换为UNIX时间戳,并以秒为单位比较它们之间的时差。$today_date=date("Y-m-d");
$entered_date=$_POST['date'];
$dateTimestamp1 = strtotime($today_date);
$dateTimestamp2 = strtotime($entered_date);
$diff= $dateTimestamp1-$dateTimestamp2;
//echo $diff;
if ($diff<=0)
{
echo "Enter a valid date";
}
#8 楼
我也遇到了这个问题,可以通过以下方法解决它:$today = date("Ymd");
$expire = str_replace('-', '', $row->expireDate); //from db
if(($today - $expire) > $NUMBER_OF_DAYS)
{
//do something;
}
评论
答案中应解释这种技术为何起作用。
– mickmackusa
6月12日9:43
请回答OP的已发布问题,而不是您如何解决自己的独特情况。
– mickmackusa
6月12日10:58
#9 楼
这是我关于如何使用PHP获取两个日期之间的天数差异的一个想法。请注意使用'!'格式,以丢弃日期的时间部分,这要归功于DateTime createFromFormat的信息而没有时间。
$today = DateTime::createFromFormat('!Y-m-d', date('Y-m-d'));
$wanted = DateTime::createFromFormat('!d-m-Y', $row["WANTED_DELIVERY_DATE"]);
$diff = $today->diff($wanted);
$days = $diff->days;
if (($diff->invert) != 0) $days = -1 * $days;
$overdue = (($days < 0) ? true : false);
print "<!-- (".(($days > 0) ? '+' : '').($days).") -->\n";
#10 楼
如果您希望某个日期($ date)在某个时间间隔内到期,例如在执行密码重置时令牌到期日期,则可以采用以下方法:$date = $row->expireDate;
$date->add(new DateInterval('PT24H')); // adds 24 hours
$now = new \DateTime();
if($now < $date) { /* expired after 24 hours */ }
但是您可以按照以下方法进行比较:
$today = new DateTime('Y-m-d');
$date = $row->expireDate;
if($today < $date) { /* do something */ }
评论
该答案忽略了最初发布的问题。请使用OP提供的示例数据。
– mickmackusa
6月12日10:49
这不是那个家伙在寻求帮助的确切内容,但我认为,如果人们了解这些原则,这种方式可能会有所帮助。
–faye.babacar78
6月13日9:13
我了解这些原则,但是此代码无法回答所提出的问题。该页面已经充斥着不正确且无关的答案-这只会使研究人员感到困惑,并浪费他们的时间。我试图寻找研究人员。
– mickmackusa
6月13日9:14
好吧,我认为这并不困难,他可以使用DateTime()类代替date()函数。我在上面给出的答案是以某种方式向研究人员提供想法。
–faye.babacar78
6月13日9:27
我将停止重复自己的讨论,并停止进行此讨论。第二高的解决方案(stackoverflow.com/a/3847762/2943403)显示了创建两个日期时间对象的非常简单(无与伦比)的方法。我完全不知道您神奇的requestDate()方法的作用-到处都没有提及它。我不会使用您的答案,也不会建议任何研究人员使用您的解决方案。我不认为自己会改变我的投票。
– mickmackusa
6月13日9:55
#11 楼
在博客上找到答案,方法很简单:评论
这似乎正在解决另一个问题。请仅回答操作员提出的问题。
– mickmackusa
6月12日10:48
#12 楼
由于PHP的字符串比较逻辑,因此可以工作。只需检查即可...if ($startdate < $date) {// do something}
if ($startdate > $date) {// do something}
两个日期都必须使用相同的格式。数字需要在左边补零,并从最高有效位到最低有效位排序。
Y-m-d
和Y-m-d H:i:s
满足这些条件。评论
d-m-Y不起作用。.Y-m-d(像2016-05-08那样前导零)将起作用。检查那些日期为d-m-Y格式的01-10-2016和20-02-2016,比较字符串0 <2,它将停止比较但错误地...
– Arxeiss
16-11-19在15:57
这证明您的技术将无法正确比较OP的日期和今天的日期:3v4l.org/SNHKT
– mickmackusa
6月12日10:56
OP具有不同的日期格式。日期看起来像是2011-10-2。
– mickmackusa
6月12日11:07
#13 楼
首先,尝试为服务器的当前日期时间指定所需的格式:获取当前日期时间
$ current_date = getdate();
按您希望的方式分别管理日期和时间:
$ current_date_only = $ current_date [year] .'-'。$ current_date [mon] .'-'。$ current_date [mday];
$ current_time_only = $ current_date ['hours']。':'.. $ current_date ['minutes']。':'。'$ current_date ['seconds'];
根据您在数据库中使用捐赠日期还是日期时间进行比较:
$ today = $ current_date_only。” '。$ current_time_only;
或
$ today = $ current_date_only;
if($ today <$ expireDate)
希望有帮助
评论
该答案未尝试解决原始问题。 OP对小时,分钟或秒没有兴趣。
– mickmackusa
6月12日10:51
评论
将数据库日期分配给DateTime对象,然后比较这些对象。您可以在stackoverflow.com/questions/961074/…中找到一个很好的示例。