2011-10-10 72 views
-1

我在php中有關於日期的緊急問題。我想在特定日期之前查詢某些記錄的數據庫,例如我想在30天內記錄,所以首先是我得到當前日期,並且我想計算日期範圍的另一端,我該怎麼做?我需要在MySQL查詢或在PHP中做到這一點?非常感激!如何在php中生成日期

+0

這取決於你是否保存日期在你的數據庫作爲UNIX時間戳或作爲MySQL的DATE( TIME)類型 – knittl

+0

是的,我在mysql中存儲日期類型字段 – Michael

回答

3

你可以很容易地在mysql中做到這一點。

例如。

SELECT * from myTable where date_column > date_sub(now(), interval 30 day); 

now()或CURRENT_TIMESTAMP - >會給你一個當前日期的值。 date_subdate_add是用於從給定日期加上或減去間隔 的函數。

文檔瀏覽: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

+0

謝謝,你救了我的一天!!!! – Michael

+0

@Michael:注意這個查詢沒有得到很好的緩存。 – gilden

0

您可以生成PHP這樣的當前日期:

$current_date = date("Y-m-d"); // the output will be in the format YYYY-MM-DD 
echo $current_date; 

您可以瞭解更多關於PHP日期和時間格式在這裏:http://php.net/manual/en/function.date.php

你可以還使用WEEK()和MONTH()從DB表中選擇某些行。我昨天問了一個有關它的問題:MySQL: Select data from a table where the date falls in the current Week and current Month

希望它解決了你的問題。

0

在php中構建間隔通常被認爲是比使用MySQL內置函數(如NOW())更好的做法。這有一個很好的理由。

假設您使用查詢使用NOW()SELECT t.foo, t.bar FROM table t WHERE created_at > DATE_SUB(NOW(), interval 30 day);)。該函數返回一個精確到最後一秒的日期(例如'2006-04-12 13:47:36')。緩存這個查詢是沒有用的,因爲它僅僅是這個1秒的時間值得。

大多數應用程序幾乎不需要這個級別的準確性,通常1天的準確性就足夠好了。您已經可以看到,以較低的準確性構建查詢會更有利,因爲結果首次被緩存,並且任何後續查詢都會在緩存中一整天。

這裏是PHP

$pdo = new \PDO($dsn, $db_user, $db_pass); 

$sql = 'SELECT t.foo, t.bar FROM table t WHERE t.created_at >= ?'; 
$stmt = $pdo->prepare($sql); 
$stmt->bindValue(1, date('Y-m-d', strtotime('-30 days'))); 
$stmt->execute(); 

一個例子有關PDO的更多信息,請看看documentation