日期比较问题

时间:2015-11-09 09:44:52

标签: php

使用我对时间和strtotime功能的非常有限的理解,我写了一些代码,用于检查当前日期是否晚于或早于另一个。

让我们假设$ _editDateString var包含字符串"本月的第二个星期二" - $ _finalEditDate的预期功能最终包含本月第二个周二的日期(d / m / y格式)如果该日期是过去的,否则包含它之前4周的日期 - 因此$ _finalEditDate应该只包含早于或等于今天日期的日期。

不幸的是,我无法在将来停止制作日期。

这里是代码,如果不那么害羞的人可以告诉我哪里出错了,我会很高兴。

if (time() >= date("d/m/y",strtotime($_editDateString))){
$_finalEditDate = date("l d/m/y",strtotime("$_editDateString"));}
else{
$_finalEditDate = date("l d/m/y",strtotime("$_editDateString - 4 weeks"));}

2 个答案:

答案 0 :(得分:2)

在比较PHP中的日期时,有两种方法:

  1. 将两个日期转换为Unix时间戳。 ¹
  2. 使用真实的DateTime对象,可以进行本地比较。
  3. 第一个看起来像这样:

    // NOTE that both timestamps are expected to be in UTC
    $timestamp1 = strtotime("2015/12/03 04:33");
    $timestamp2 = strtotime("2015/12/01 05:33");
    
    if ($timestamp1 < $timestamp2) {
        // …
    }
    

    第二个看起来像这样:

    $tz1 = new DateTimezone("America/New_York");
    $tz2 = new DateTimezone("Europe/Berlin");
    $date1 = new DateTime("2015/12/03 06:00", $tz1);
    $date2 = new DateTime("2015/12/03 09:00", $tz2);
    
    // Note that $date1 is later, because the timezone adds an offset
    
    if ($date1 < $date2) {
        // …
    }
    

    决定使用哪种方法取决于您的申请。如果您只是在同一时区处理几个日期,并忽略DST之类的东西,请使用第一种方法。如果您有一个更复杂的应用程序并且需要考虑时区和DST,那么实际的DateTime对象可能是一个更可靠的选择。

    决定使用哪种方法取决于您的使用案例。如果您要比较系统生成的日期,请确保它们是UTC格式,并且您可以使用简单的时间戳。只要您使用引用系统外日期的用户输入日期或日期(例如日历条目或公共交通时间表),请使用具有正确时区的真实DateTime个对象。

    ¹Unix时间戳通常假定为UTC。当然,当您通过用户输入获得2015/12/03 04:33之类的日期并将其转换为strtotime时,您还会获得时间戳。但隐含的是,这个时间戳将引用当地日期。当这些日期涉及不同的时区而你试图比较它们时,你会遇到麻烦。

答案 1 :(得分:0)

private返回的值与klass_name.send(:include, described_class)返回的值进行比较,并使用time()函数格式化该日期。

strtotime($_editDateString)