时间比较PHP梦魇

时间:2013-08-27 14:28:21

标签: php datetime

我遇到了与PHP进行时间比较的问题 - 我认为我必须做一些愚蠢的事情,但我现在已经尝试了几个小时不同的事情而且我只是碰壁砖。

我从EVE的API中提取数据,然后检查那里是否还有订阅,以及是否有培训技能 - 这两者都有一个特定的时间范围(订阅为1周,12小时)对于技能而言,我想提出一个警告 - 但是我似乎无法让它发挥作用。所有日期和时间的输出似乎都是正确的格式,我无法进行比较。

我想知道是否有人可以指出我最愚蠢的错误,并向我推进正确的方向。

谢谢你看看,

<?php 
// ---- For Skill Queue
$apiSection = "char/SkillQueue";
$urlChar = "https://api.eveonline.com/$apiSection.xml.aspx?keyID=$keyID&vCode=$vCode&characterID=$charID";
$data = file_get_contents($urlChar);
$xml = new SimpleXMLElement($data);
foreach ($xml->result->rowset->row as $row){
        $charQueueEndTemp = $row{'endTime'};
}
$charQueueEnd = date("d-m-Y H:m", strtotime($charQueueEndTemp));
//echo "Skill Test" .  $charQueueEnd;

// --- Account API
$apiSection = "account/AccountStatus";
$urlAccount = "https://api.eveonline.com/$apiSection.xml.aspx?keyID=$keyID&vCode=$vCode";
$data = file_get_contents($urlAccount);
$xml = new SimpleXMLElement($data);
$accSubsTemp = $xml->result->{'paidUntil'}->{0};
$accSubs = date("d-m-Y H:m", strtotime($accSubsTemp));


date_default_timezone_set('Europe/Paris');
$currentDate = date("d-m-Y H:m");
$lessWeek = date("d-m-Y H:m", strtotime("-1 week"));
$plusWeek = date("d-m-Y H:m", strtotime("+1 week"));
$plus12Hour = date("d-m-Y H:m", strtotime("+12 hour"));
//Date Tests
//echo "</br> Curent Date: ".$currentDate;
//echo "</br> Plus Week: ".$plusWeek;
//echo "</br>Acc Subs: ".$accSubs;
//echo "</br>Acc +12: ".$plus12Hour;

// -- Account Subscribed Check
if($currentDate > $accSubs){
        echo "Account is not Subscribed";
}
elseif($plusWeek > $accSubs){
        echo "Account has less than 1 week Subscription";
}
else{
        echo "Account is Subscribed";
}

// -- Skill Training Check
if($charQueueEnd = null){
        echo "Skill Queue Ended";
}
elseif($plus12Hour > $charQueueEnd){
        echo "Skill Queue ending in less than 12 Hours";
}
else{
        echo "Skill Queue Active";
}
?>

3 个答案:

答案 0 :(得分:3)

开始使用DateTime类进行日期/时间操作/比较:

如果您将代码更改为:

$currentDate = new DateTime();
$lessWeek = new DateTime("-1 week");
$plusWeek = new DateTime("+1 week");
$plus12Hour = new DateTime("+12 hour");

...然后您的IF语句将开始起作用。

答案 1 :(得分:2)

您正在完成日期比较错误。您要比较日期 STRINGS ,例如使用一些日期格式化的方式与您正在做的相同:

$plusWeek = '26-08-2013 8:30'; Aug 26th, 2013
$accSubs = '9-08-2013 10:45';   Aug 9th, 2013

由于这些是字符串,因此适用字符串比较规则。这意味着字符串逐字符进行比较,(string)26实际上 LESS string(9)更长,因为2小于9

您需要将内容保留为原始时间戳,例如strtotime()输出:

$plusWeek = strtotime('2013-08-26 08:30'); // 1377527400
$accSubs = strtotime('2013-08-09 10:45').; // 1376066700

比较这些整数值可以根据需要使用。

主要问题还在于您未按“最重要数据”顺序格式化数据字符串。如果它们首先用年份格式化,例如

yyyy-mm-dd hh:mm:ss

然后字符串比较WOULD起到副作用。

答案 2 :(得分:1)

如果你想比较日期,你必须比较strtotime()函数返回的参数,例如:

elseif(strtotime($plus12Hour) > strtotime($charQueueEnd)){