Konwersja z DateTime MySQL do innego formatu za pomocą PHP

Mam kolumnę datetime W MySQL.

Jak mogę przekonwertować go na wyświetlacz jako mm/dd/yy H:M (AM/PM) używając PHP?

Author: davejal, 2008-09-26

17 answers

Jeśli szukasz sposobu na normalizację daty do formatu MySQL, użyj następującego

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

Linia $phpdate = strtotime( $mysqldate ) przyjmuje łańcuch znaków i wykonuje serię heurystyk, aby przekształcić ten łańcuch w uniksowy znacznik czasu.

Linia $mysqldate = date( 'Y-m-d H:i:s', $phpdate ) używa tego znacznika czasu i PHP date funkcja przywracania znacznika czasu do standardowego formatu daty MySQL.

(Uwaga wydawcy: ta odpowiedź jest tutaj ze względu na oryginalne pytanie z mylącym sformułowaniem, a Ogólne Przydatność Google ta odpowiedź zapewniona nawet jeśli nie " bezpośrednio odpowiedzieć na pytanie, które teraz istnieje)

 473
Author: kta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-16 19:09:00

Aby przekonwertować datę pobraną z MySQL na żądany format(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

Zobacz opcje formatowania daty PHP, aby dostosować format.

 289
Author: Tim Boland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-21 10:23:52

Jeśli używasz PHP 5, Możesz również spróbować

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
 103
Author: enobrev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 20:02:59
$valid_date = date( 'm/d/y g:i A', strtotime($date));

Bibliografia: http://php.net/manual/en/function.date.php

 35
Author: Tony Stark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-24 13:24:19

Wreszcie właściwe rozwiązanie dla PHP 5.3 i wyżej:

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');
 15
Author: Hasenpriester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 00:44:39

Łatwiejszym sposobem byłoby sformatowanie daty bezpośrednio w zapytaniu MySQL, zamiast PHP. Zobacz Instrukcja MySQL dla DATE_FORMAT .

Jeśli wolisz robić to w PHP, potrzebujesz funkcji date , ale najpierw musisz przekonwertować wartość bazy danych na znacznik czasu.

 12
Author: flash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 23:15:23

Zapomnij o wszystkim. Wystarczy użyć:

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))
 10
Author: nixis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 16:51:03

Aby poprawnie sformatować obiekt DateTime w PHP do przechowywania w MySQL użyj znormalizowanego formatu, którego używa MySQL, czyli ISO 8601 .

PHP ma ten format zapisany jako stała od wersji 5.1.1 i zdecydowanie polecam go używać, a nie ręcznie wpisywać ciąg znaków za każdym razem.

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

To, oraz lista innych stałych DateTime PHP są dostępne w http://php.net/manual/en/class.datetime.php#datetime.constants.types

 9
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-31 17:42:08

To powinno sformatować pole w zapytaniu SQL:

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
 8
Author: riz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 16:49:21

Użyj funkcji date :

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
 7
Author: Gustavo Carreno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 23:16:05

W zależności od konfiguracji DateTime MySQL. Typowo: 2011-12-31 07:55:13 format. Ta bardzo prosta funkcja powinna wykonywać magię:

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

echo datetime(); // display example: 2011-12-31 07:55:13
[2]}lub trochę więcej zaliczki, aby dopasować pytanie.
function datetime($date_string = false)
{
    if (!$date_string)
    {
        $date_string = time();
    }
    return date("Y-m-d H:i:s", strtotime($date_string));
}
 5
Author: tfont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-29 11:45:52
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

Jeśli nie chcesz zmieniać każdej funkcji w kodzie PHP, aby pokazać oczekiwany format daty, zmień go w źródle-Twojej bazie danych.

Ważne jest nazwanie wierszy operatorem jako jak w powyższym przykładzie (jako dateFrom, jako dateUntil). Nazwy, które tam piszesz, są nazwami, wiersze zostaną wywołane w Twoim wyniku.

Wynikiem tego przykładu będzie

[dzień miesiąca, numeryczny (0..31)].[Nazwa miesiąca (styczeń..Grudnia)].[Rok, numeric, four digits]

Przykład: 5.Sierpień.2015

Zmień kropki za pomocą wybranego separatora i sprawdź funkcję DATE_FORMAT(Data,format) dla większej liczby formatów dat.

 5
Author: Rangel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 18:12:37

Możesz również poprosić, aby Twoje zapytanie zwróciło czas jako uniksowy znacznik czasu. To pozbyłoby się potrzeby wywołania strtotime() i sprawiłoby, że sprawy byłyby mniej intensywne po stronie PHP...

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

Następnie w PHP po prostu użyj funkcji date(), aby sformatować go w dowolny sposób.

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

Lub

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

Podoba mi się to podejście, a nie używanie MySQL'S DATE_FORMAT funkcja, ponieważ pozwala na ponowne użycie tego samego zapytania do pobrania danych i pozwala zmienić formatowanie w PHP.

Denerwujące jest posiadanie dwóch różnych zapytań, aby zmienić sposób, w jaki Data wygląda w interfejsie użytkownika.

 3
Author: phatduckk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 16:45:24

Możesz mieć problemy z datami nie zwracanymi w uniksowym znaczniku czasu, więc to działa dla mnie...

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))
 1
Author: matt.j.crawford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-16 23:52:33

To zadziała...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
 1
Author: Mihir Vadalia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 06:11:04

Używając PHP w wersji 4.4.9 i MySQL 5.0, zadziałało mi to:

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

PubDate jest kolumną w MySQL.

 0
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 16:47:30
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
 -1
Author: SagarPPanchal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-02 13:00:47