2014-05-16 122 views
1

我必須在30天后發出通知。如何計算天數的持續時間?

foreach ($pdo->query($sql) as $row) { 
$date = date_create($row['data']); 
$laikotarpas = date_diff(new DateTime("now"), $date); 
// var_dump($liko); 
$liko = 30 - $laikotarpas->d; 

我想在幾天內得到正確的結果。 我曾在2014年3月19日添加了一行,這說明離開3天至30

我的目標是實現: 我在2014年3月19日添加記錄,並得到結果有多少天,從今天通過。我認爲$ laikotarpas-> d給出了一個持續時間,但是,當我做了計算來設置30天的限制。 所以我的主要問題是要得到正確的$ liko,但我不知道如何。 我加入使用此代碼(使用PDO)我時間:

$q->execute(array($name, 
date("Y-m-d H:i:s", time()) 
); 

在我的數據庫我使用DATETIME。我打印這個日期從SQL使用此PHP:

<?php echo date_format(date_create($data['data']), 'Y-m-d'); ?> 

我的方式很好嗎?如何改善?

----- -----編輯

我不得不使用PHP5.2

只是有一個想法,它只需幾天,而忽略月過去了計數。如何更新以僅在幾天內計算持續時間?

回答

3

如果你想找到現在和過去的日期之間的區別,嘗試這樣的事情:

PHP> = 5.2.0

$then = '2014-03-19'; 
$date = new DateTime($then); 
$now = new DateTime('now'); 
$diff = $date->diff($now); 

echo $diff->days . ' days since ' . $then . PHP_EOL; // 58 days since 2014-03-19 

PHP 5.2.0 <

$date = strtotime($then); 
$now = time(); 
$diff = $now - $date; 
$days = round($diff/60/60/24); // convert seconds to days and round off 

注:瞭解更多關於你的後r問題,我強烈建議您根據MySQL中的日期範圍而不是PHP過濾結果 - 這會更容易,更經濟,並且會降低影響您不想要的數據的潛在風險。 See Cull Larson's answer

+0

但如何計算幾天來限制它們。例如,我想在從記錄添加到數據庫之後的30天前(通過25天后發送電子郵件)通知我的客戶5天。 – pvaitonis

+0

順便說一下,我使用php 5.2 – pvaitonis

+0

@pvaitonis你應該選擇客戶在你的MySQL查詢的30天之前5天聯繫,而不是在PHP中進行。只需選擇合適的客戶發送到MySQL中,然後使用PHP進行發送(如果需要,再次使用PHP驗證日期),從而最大限度地減少發生錯誤的可能性。 –

2

你可以只使用這樣的查詢:

SELECT * FROM myTable WHERE DATE(signupDate) = DATE_SUB(NOW(), INTERVAL 25 DAY); 

這會給你與25日齡一個註冊日期的所有結果。如果你在表告訴你是否已經通知了他們的標誌,你可以通過沿太:

SELECT * FROM myTable WHERE notified=false AND DATE(signupDate) = DATE_SUB(NOW(), INTERVAL 25 DAY); 

如果你想獲得每記錄25天或更舊,尚未收到通知:

SELECT * FROM myTable WHERE notified=false AND DATE(signupDate) <= DATE_SUB(NOW(), INTERVAL 25 DAY);