簡體   English   中英

使用 PHP 從 MySQL 日期時間轉換為另一種格式

[英]Convert from MySQL datetime to another format with PHP

我在 MySQL 中有一個datetime列。

如何使用 PHP 將其轉換為mm/dd/yy H:M (AM/PM)顯示?

如果您正在尋找一種將日期標准化為 MySQL 格式的方法,請使用以下命令

$phpdate = strtotime( $mysqldate );
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );

$phpdate = strtotime( $mysqldate )行接受一個字符串並執行一系列啟發式方法將該字符串轉換為 unix 時間戳。

$mysqldate = date( 'Ymd H:i:s', $phpdate )使用該時間戳和 PHP 的date函數將該時間戳轉換回 MySQL 的標准日期格式。

編者注:這個答案在這里是因為原始問題的措辭令人困惑,並且即使它沒有直接回答現在存在的問題,這個答案也提供了谷歌的一般用途)

將從 MySQL 檢索到的日期轉換為請求的格式 ( mm/dd/yy H:M (AM/PM) ):

// $datetime is something like: 2014-01-31 13:05:59
$time = strtotime($datetimeFromMysql);
$myFormatForView = date("m/d/y g:i A", $time);
// $myFormatForView is something like: 01/31/14 1:05 PM

請參閱PHP 日期格式選項以調整格式。

如果您使用的是 PHP 5,您也可以嘗試

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
$valid_date = date( 'm/d/y g:i A', strtotime($date));

參考: http: //php.net/manual/en/function.date.php

最后是 PHP 5.3 及更高版本的正確解決方案:(在示例中添加了可選的時區,如評論中提到的)

無時區:

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');

帶時區:

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date, new \DateTimeZone('UTC'));
$date->setTimezone(new \DateTimeZone('Europe/Berlin'));
echo $date->format('m/d/y h:i a');

一種更簡單的方法是直接在 MySQL 查詢中而不是 PHP 中格式化日期。 請參閱DATE_FORMAT 的 MySQL 手冊條目

如果您更願意在 PHP 中執行此操作,那么您需要date函數,但您必須先將數據庫值轉換為時間戳。

忘記所有。 只需使用:

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))

要在 PHP 中正確格式化DateTime對象以存儲在 MySQL 中,請使用 MySQL 使用的標准化格式,即ISO 8601

PHP 從 5.1.1 版本開始將這種格式存儲為常量,我強烈建議使用它而不是每次都手動輸入字符串。

$dtNow = new DateTime();
$mysqlDateTime = $dtNow->format(DateTime::ISO8601);

這和其他 PHP DateTime 常量的列表可在http://php.net/manual/en/class.datetime.php#datetime.constants.types

這應該格式化 SQL 查詢中的字段:

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename

使用日期函數:

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>

取決於您的 MySQL 日期時間配置。 通常: 2011-12-31 07:55:13格式。 這個非常簡單的功能應該可以發揮作用:

function datetime()
{
    return date( 'Y-m-d H:i:s', time());
}

echo datetime(); // display example: 2011-12-31 07:55:13

或者提前一點來匹配問題。

function datetime($date_string = false)
{
    if (!$date_string)
    {
        $date_string = time();
    }
    return date("Y-m-d H:i:s", strtotime($date_string));
}
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

如果您不想更改 PHP 代碼中的每個函數以顯示預期的日期格式,請在源 - 您的數據庫中更改它。

如上例所示,使用as運算符命名行很重要(如 dateFrom、dateUntil)。 你在那里寫的名字就是名字,行將在你的結果中被調用。

這個例子的輸出將是

[月份中的日期,數字 (0..31)].[月份名稱 (January..December)].[年份,數字,四位數字]

示例:2015 年 8 月 5 日

使用選擇的分隔符更改點並檢查DATE_FORMAT(date,format)函數以獲取更多日期格式。

您還可以讓您的查詢將時間作為 Unix 時間戳返回。 這將消除調用strtotime()的需要,並使 PHP 方面的工作變得不那么密集......

select  UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234;

然后在 PHP 中,只需使用date()函數以任何您喜歡的方式對其進行格式化。

<?php
  echo date('l jS \of F Y h:i:s A', $row->unixtime);
?>

或者

<?php
  echo date('F j, Y, g:i a', $row->unixtime);
?>

我喜歡這種方法而不是使用MySQLDATE_FORMAT函數,因為它允許您重用相同的查詢來獲取數據並允許您更改 PHP 中的格式。

有兩個不同的查詢只是為了改變日期在 UI 中的顯示方式很煩人。

這將工作...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));

您可能會遇到 Unix Timestamp 中未返回的日期的問題,所以這對我有用......

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))

使用 PHP 4.4.9 和 MySQL 5.0,這對我有用:

$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate

PubDateMySQL中的列。

我建議的方法如下所示。 首先,從 mysql 格式的字符串創建一個基本的日期時間對象; 然后你按照你喜歡的方式格式化它。 幸運的是,mysql datetime 符合 ISO8601,因此代碼本身看起來非常簡單和優雅。 請記住,盡管datetime列沒有時區信息,因此您需要對其進行適當的轉換

這是代碼:

(new ISO8601Formatted(
    new FromISO8601('2038-01-19 11:14:07'),
    'm/d/Y h:iA'
))
    ->value();

它輸出01/19/2038 11:14AM ——希望是你所期望的。

此示例使用蛋白酥皮庫。 如果您願意,可以查看更多內容

直接輸出,例如德語格式:

  echo(date('d.m.Y H:i:s', strtotime($row["date_added"])));
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";

暫無
暫無

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

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