簡體   English   中英

在PHP中從SQL格式化時間戳的最簡單方法是什么?

[英]What is the simplest way to format a timestamp from SQL in PHP?

什么是最簡單,最快速的方法來完成下面的PHP代碼,使輸出采用用戶友好的格式(例如,“2006年10月27日”)?

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = ???($row['my_timestamp']);
echo $formatted_date;

您可以使用MySQL為您執行此操作,

$result = mysql_query("SELECT DATE_FORMAT(my_timestamp, '%M %d, %Y) AS my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = $row['my_timestamp'];
echo $formatted_date;

或者使用PHP,

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = strftime('%B %d, %y', $row['my_timestamp']);
echo $formatted_date;

我傾向於在S​​QL中進行日期格式化,就像Aron回答一樣 雖然PHP日期,我更喜歡使用的DateTime對象(PHP5 +)在日期

$timestamp = new DateTime($row['my_timestamp']);
echo $timestamp->format('F j, Y') . '<br />';
echo $timestamp->format('F j, Y g:ia');

你想要date()函數。

如果您有DATE或DATETIME列,則可以使用SELECT UNIX_TIMESTAMP(mycolumn)AS mycolumn將其轉換為要使用的日期函數的unix時間戳。

你應該使用DateTime類(或任何home增長的等效類),over de Date函數,而不是使用timestamps:

  • 對於1970年以前的日期,時間戳在所有環境中都不能正常工作 - 如果您處理生日,那么您依賴的代碼可能會在某些服務器上中斷
  • 也非常小心strftime的使用,它看起來像一個很好的功能,但它是非常不可靠的,因為它取決於setlocale,這是在整個流程。 這意味着如果你的服務器是一個Windows框,你每個處理器有一個進程,然后其余部分是多線程的 - 換句話說,一個腳本中的一個setlocale將影響同一處理器上的其他腳本 - 非常討厭!

在一天結束時,不要依賴時間戳,除非你是在英語環境中,並且只處理1970年到2032年之間的日期......!

如果您的表在該日期字段上編入索引,並且您在調用中使用了mysql數據格式函數..(即.. SELECT DATE_FORMAT(my_timestamp,'%M%d,%Y)AS my_time)它將破壞您的索引。 要記住的事情。 我們已經看到從sql語句中刪除所有功能並讓php處理所有功能的速度顯着提高。 功能如格式化日期和簡單的數學

我用:

日期(“F j,Y”,strtotime($ row ['my_timestamp']))

或者您可以將SELECT更改為:DATE_FORMAT(字段,'%d%M,%Y')作為日期時間

你有一個選擇。 您可以在PHP中使用date()函數並處理MySQL的輸出,或者您可以在MySQL中使用date_format()函數並讓它返回一個格式化的字符串。

根據我的經驗,你使用哪個並不重要,但要保持一致。 它們具有不同的格式參數,因此如果您在給定的應用程序中同時使用它們,您將花費大量時間來記住“W”是否為您提供了星期幾或一年中的星期的名稱。

讓數據庫為您執行格式化。 它不容易出錯,因為你沒有讀取字符串並進行轉換。 相反,數據庫將從其本機格式轉換為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM