2015-02-09 98 views
2

我想爲我的應用程序創建一個提醒,但是如果我比較兩個日期,則結果總是「正常」,即使條件不正確。下面是index.php的代碼:比較日期沒有正確顯示

<?php 
require_once 'app/init.php'; 

date_default_timezone_set('Europe/Brussels'); 

$itemsQuery = $db->prepare(" 
    SELECT id, name, done, reminder 
    FROM items 
    WHERE user = :user 
"); 

$itemsQuery->execute(array(
    ':user' => $_SESSION['user_id'] 
)); 

$items = $itemsQuery->rowCount() ? $itemsQuery : array(); 
?> 

<!doctype html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Scorpio To Do</title> 

    <link href="http://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet"> 
    <link href="http://fonts.googleapis.com/css?family=Shadows+Into+Light+Two" rel="stylesheet"> 
    <link href="css/main.css" rel="stylesheet"> 

    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0"> 
</head> 
<body> 
    <div class="list"> 
     <h1 class="header">Scorpio To Do</h1> 

     <?php if(!empty($items)): ?> 

     <ul class="items"> 
      <?php foreach($items as $item): ?> 
       <li> 
        <a href="indexAdvanced.php?as=advanced&item=<?php echo $item['id']; ?>"><span class="item<?php echo $item['done'] ? ' done' : '' ?>"><?php echo $item['name']; ?></span></a> 
        <?php if(!$item['done']): ?> 
         <a href="mark.php?as=done&item=<?php echo $item['id']; ?>" class="done-button">Done</a> 
        <?php elseif($item['done']): ?> 
         <a href="mark.php?as=notdone&item=<?php echo $item['id']; ?>" class="done-button">Not Done</a> 
         <a href="mark.php?as=del&item=<?php echo $item['id']; ?>" class="done-button">Delete</a> 
        <?php endif; ?> 
       </li> 

       <!--/*it's all about this code here*/--> 

       <a href="#" name="something" id="something"> 
        <?php 
         echo $datum = $item['reminder']; //echoes good 
         echo " - "; 
         $nu = new DateTime('NOW'); 
         echo $nu->format('Y-m-d H:i:s'); //echoes good 
         echo " - "; 
         if(strtotime($datum) >= $nu){ //comes out wrong 
          echo 'ok'; 
         } else{ 
          echo 'nok'; 
         } 
        ?> 
       </a> 


      <?php endforeach; ?> 
     </ul> 
     <?php else: ?> 
      <p>You havn't added any items yet!</p> 
     <?php endif; ?> 

     <form class="item-add" action="add.php" method="post"> 
      <input type="text" name="name" placeholder="Type something here" class="input" autocomplete="off" required> 
      <input type="submit" value="Add" class="submit"> 
     </form> 
    </div> 

    <script src="js/jquery-1.9.1.js"></script> 
    <script type="text/javascript" src="js/scorpiotodo.js"></script> 
</body> 
</html> 
+2

問自己:什麼是'$ nu',什麼是'$項目['提醒「]'?他們使用相同的格式嗎? 'var_dump'告訴你什麼?如何比較不同代表的變量在PHP中的工作?爲什麼'DateTime'有一個'getTimestamp'方法(http://php.net/manual/en/datetime.gettimestamp.php)? – 2015-02-09 13:01:47

回答

2

的情況應該是這樣的

# convert the datetime to unix 

$str_nu = strtotime($today->format('Y-m-d H:i:s')); 
# check two unix timestamp 
if(strtotime($datum) >= $str_nu){ //comes out wrong 
    echo 'ok'; 
} else{ 
    echo 'nok'; 
} 

這裏是一個鏈接

Why can't I access DateTime->date in PHP's DateTime class? Is it a bug?

+1

謝謝,沒有注意到。認爲這是正確的,因爲我做了'格式'功能,但它也必須是'strtotime':) – user3906610 2015-02-10 07:08:51

0

您與時間戳比較格式化的日期和不工作。 嘗試用time()取代您$nu變量:

if(strtotime($datum) >= time()){ 
0

那是因爲你是比較對象(DateTime)到時間戳。 首先使用getTimestamp()

if(strtotime($datum) >= $nu->getTimestamp()) {