2017-07-24 40 views
2

我写这段代码其中之一:如果我提供$ customDate像PHP:两个同日声明,但星期是错误的

if(!is_null($customDate)){ 
    $referenceDate = strtotime($customDate); 
    $toDay = date("N", $referenceDate); 
    echo("/".$referenceDate."/".$toDay."/"); 
} 
else{ 
    $referenceDate = strtotime(date("d:m:y")); 
    $toDay = date("N"); 
    echo("/".$referenceDate."/".$toDay."/"); 
} 

函数名(“24: 7" 时17分);

它打印出这一点:

/2分之1500941237/

一个日期戳(我认为)和2周的天 - 周二。

如果我不提供$ customDate和呼叫功能:

函数名();

我得到这个:

/1分之1500941237/

这又是 - 邮戳(我认为)和1周的一天 - 周一。

第二个是正确的,它是24号,它是星期一。

我对PHP很新颖,所以我几乎100%确定在操作日期时有一些细微差别,但我不确定它是什么。

两张相同的日期戳怎么能产生不同的星期几?

使用默认配置在Windows 10上的WAMP服务器上运行它。

全功能:

function nextDate($customDate=null){ 

    $referenceDate; 
    $toDay; 


    if(!is_null($customDate)){ 
     $referenceDate = strtotime($customDate); 
     $toDay = date("N", $referenceDate); 
     echo("/".$referenceDate."/".$toDay."/"); 
    } 
    else{ 
     $referenceDate = strtotime(date("d:m:y")); 
     $toDay = date("N"); 
     echo("/".$referenceDate."/".$toDay."/"); 
    } 

} 

nextDate( “24:07:17”); - >给出了错误的结果,它说24日是星期二。

nextDate(); - >给出正确的结果,它说24日是星期一。

+0

你能告诉我们处理日期后的代码吗? – GrumpyCrouton

+0

@GrumpyCrouton没有日期处理,我只是从函数外部调用nextDate()。 – iAmTheGuy96

+0

我已经运行你的代码在线编辑器,我还没有看到任何问题都有相同的结果显示在这两种情况。 http://www.writephponline.com/ – rowmoin

回答

4

这是因为24:07:17是无效的日期格式,PHP认为这是一个时间,所以“今天24:07:17”

echo date("Y-m-d H:i:s", strtotime("24:07:17")); 
// outputs 2017-07-25 00:07:17 

使用有效日期格式,或将其转换为东西strtotime将能正确理解:

list($d,$m,$y) = explode(":", "24:07:17"); 
$referenceDate = strtotime("20{$y}-{$m}-{$d}"); 
+0

所以这是一个分隔符“:”问题或日|月|年份序列? – iAmTheGuy96

+0

@ iAmTheGuy96两者。 'date(“Y-m-d”,strtotime(“01-03-17”));'是2001年3月。我们在计算机中使用Y-M-D的原因是https://en.wikipedia。org/wiki/ISO_8601 – Peter

+0

谢谢,现在就解释它。 它现在完美运作。不知道D:M:Y和Y-m-d之间有如此大的差异 – iAmTheGuy96