Chciałbym podkreślić, że zarówno Ty, jak i @troelskn wysłali tę samą odpowiedź 3 stycznia 2010 r. O 17:08, ale nadal otrzymał około 800 głosów pozytywnych. Twoja odpowiedź była prawdopodobnie kilka sekund od jego. :) Dziękujemy za napisanie go: D
Aleksandar
9 sekund później (widoczne po najechaniu kursorem „odpowiedzi”)
fajny pomysł na zawinięcie konstruktora i sformatowanie go we właściwy sposób.
acme
w końcu php zaczął kopiować z delphi ic # :)
Erçin Dedeoğlu
1
to może być miłe, ale w ogóle nie odpowiada na pytanie, nie jest to łatwiejsze ani szybsze
Asped
8
@Asped W jaki sposób nie odpowiada na pytanie? Jest to funkcja PHP, która „zwraca datę i godzinę w tym samym formacie, co funkcja MySQL NOW ()”, co jest właśnie pytaniem.
vascowhite
@vascowhite - pytanie brzmiało, czy istnieje konkretna funkcja dla tego jednego celu. więc odpowiedź brzmi NIE. wszystkie inne możliwości wymienione tutaj mogą działać i twoje też jest miłe, ale nie pomaga, ponieważ facet pytający już wiedział, jak to zrobić, ale chciał łatwiejszej, jednofunkcyjnej funkcji, której twoja nie jest :)
Asped
34
Użyj tej funkcji:
function getDatetimeNow(){
$tz_object =newDateTimeZone('Brazil/East');//date_default_timezone_set('Brazil/East');
$datetime =newDateTime();
$datetime->setTimezone($tz_object);return $datetime->format('Y\-m\-d\ h:i:s');}
Racja, jeśli zmarnujesz takie postacie, zabraknie ich.
Bill Karwin
4
tak źle, czas () tak
naprawdę
15
Właściwie 8 znaków.
Henrik Erlandsson
52
Biorąc pod uwagę wszystkie marnotrawstwo tutaj, uważam, że to dość wstydliwe, że użył podwójnych cytatów
Augie Gardner,
37
Wyobraź sobie, że wszystkie postacie zmarnowane na komentowanie marnotrawstwa postaci!
Pwnball
25
Krótka odpowiedź
$now = date_create()->format('Y-m-d H:i:s');
Długa odpowiedź znajduje się poniżej.
Naśladowanie funkcji MySQL NOW () w PHP
Oto lista sposobów naśladowania NOW()funkcji MySQL w PHP .
// relative date
$now = date_create('now')->format('Y-m-d H:i:s');// works in php 5.2 and higher
$now = date_create()->format('Y-m-d H:i:s');// also works in php 5.2
$now =newDateTime('now')->format('Y-m-d H:i:s');// syntax error!!!
$now =(newDateTime('now'))->format('Y-m-d H:i:s');// works in php 5.4 and higher
$now = date('Y-m-d H:i:s');// Slightly higher performance, but less usable for date/time manipulations// From Unix timestamp// Using date_create() with a Unix timestamp will give you a FALSE, // and if you try to invoke format() on a FALSE then you'll get a: // Fatal error: Call to a member function format() on boolean // So if you work with Unix timestamps then you could use: date_create_from_format().
$unixTimeStamp =1420070400;// 01/01/2015 00:00:00
$y2015 = date_create_from_format('U', $unixTimeStamp, timezone_open('Europe/Amsterdam'))->format('Y-m-d H:i:s');
$y2015 = date('Y-m-d H:i:s', $unixTimeStamp);
Myślę, że date_create()->format('Y-m-d H:i:s')to najlepszy sposób, ponieważ takie podejście pozwala łatwiej obsługiwać czas / strefę czasową date('Y-m-d H:i:s')i działa od php 5.2.
Ciekawym faktem jest to, że można uzyskać format daty i godziny, uruchamiając to zapytanie: SHOW VARIABLES LIKE 'd%e_format'wynik może wyglądać mniej więcej tak:
Kiedy stref czasowych znaczenia następnie użycie date_create()->format()sprawia, że wiele większy sens wtedy date(), ponieważ date()używa domyślnej strefy czasowej, który jest skonfigurowany php.iniw date.timezonedyrektywie. Link: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .
Możliwa jest zmiana strefy czasowej w czasie wykonywania. Przykład:
date_default_timezone_set('Asia/Tokyo');.
Wadą tego jest to, że wpłynie to na wszystkie funkcje daty / godziny. Ten problem nie istnieje, jeśli używasz go date_create()->format()w połączeniu z timezone_open().
PHP obsługuje główne strefy czasowe. Zabawne jest to, że obsługuje nawet koło podbiegunowe i Antarktydę. Czy kiedykolwiek słyszałeś o Longyearbyen? Jeśli nie, to nie martw się, ja też nie przeczytałem oficjalnej dokumentacji PHP.
OOP używa obiektów pełnych stanu. Wolę więc myśleć w ten sposób:
// Create a DateTime Object. // Use the DateTime that applies for tomorrow.// Give me the datetime in format 'Y-m-d H:i:s'
$tomorrow = date_create('+1 day')->format('Y-m-d H:i:s');
Następnie pomyśl w ten sposób:
// Give me a date time string in format 'Y-m-d H:i:s', // use strtotime() to calculate the Unix timestamp that applies for tomorrow.
$tomorrow = date('Y-m-d H:i:s', strtotime('+1 day'));
Dlatego powiedziałbym, że to date_create()->format()podejście jest dla mnie bardziej czytelne date().
date_create () VS nowy DateTime ()
Korzystne fakty date_create()ponad new DateTime()to:
Przestrzenie nazw
Przestrzenie nazw
Jeśli pracujesz w przestrzeni nazw i chcesz zainicjować obiekt DateTime za pomocą nowego słowa kluczowego, musisz to zrobić w następujący sposób:
namespace my_namespace;// The backslash must be used if you are in a namespace.// Forgetting about the backslash results in a fatal error.
$dt =new \DateTime();
Nie ma w tym nic złego, ale wadą tego jest to, że ludzie czasami zapominają o odwrotnym ukośniku. Korzystając z date_create()funkcji konstruktora, nie musisz się martwić o przestrzenie nazw.
$dt = date_create();// in or not in a namespace it works in both situations
Przykład date_create () -> format ()
Używam tego podejścia do moich projektów, jeśli muszę wypełnić tablicę. Lubię to:
Jeszcze jedna odpowiedź, którą uważam za łatwą w użyciu:
echo date('c');// 2015-07-27T00:00:00+02:00
Jest to data ISO 8601 (dodana w PHP 5), której używa MySQL
Edytować
MySQL 5.7 domyślnie nie zezwala na strefę czasową w czasie danych. Możesz wyłączyć błąd za pomocą SQL_MODE=ALLOW_INVALID_DATES. Aby uzyskać więcej informacji, zobacz odpowiedź tutaj: https://stackoverflow.com/a/35944059/2103434 . Ale oznacza to również, że strefa czasowa zostanie utracona podczas zapisywania w bazie danych!
Domyślnie MySQL używa strefy czasowej systemu i tak długo, jak PHP używa tej samej strefy czasowej nie powinno być problemu. W moim przypadku CET / UTC + 2.
Oznacza to, że jeśli wstawię 2015-07-27T00:00:00+02:00do bazy danych, tylko 2015-07-27T00:00:00będą przechowywane (ale to jest właściwy czas lokalny!).
Aby być bezpiecznym, zawsze używaj UTC na serwerze, określ go w MySQL i PHP, a następnie przekonwertuj na ustawienia regionalne użytkownika tylko podczas wyświetlania daty:
ATOM ="Y-m-d\TH:i:sP";// -> 2005-08-15T15:52:01+00:00
COOKIE ="l, d-M-Y H:i:s T";// -> Monday, 15-Aug-2005 15:52:01 UTC
ISO8601 ="Y-m-d\TH:i:sO";// -> 2005-08-15T15:52:01+0000
RFC822 ="D, d M y H:i:s O";// -> Mon, 15 Aug 05 15:52:01 +0000
RFC850 ="l, d-M-y H:i:s T";// -> Monday, 15-Aug-05 15:52:01 UTC
RFC1036 ="D, d M y H:i:s O";// -> Mon, 15 Aug 05 15:52:01 +0000
RFC1123 ="D, d M Y H:i:s O";// -> Mon, 15 Aug 2005 15:52:01 +0000
RFC2822 ="D, d M Y H:i:s O";// -> Mon, 15 Aug 2005 15:52:01 +0000
RFC3339 ="Y-m-d\TH:i:sP";// -> 2005-08-15T15:52:01+00:00 ( == ATOM)
RFC3339_EXTENDED ="Y-m-d\TH:i:s.vP";// -> 2005-08-15T15:52:01.000+00:00
RSS ="D, d M Y H:i:s O";// -> Mon, 15 Aug 2005 15:52:01 +0000
W3C ="Y-m-d\TH:i:sP";// -> 2005-08-15T15:52:01+00:00
Podoba mi się rozwiązanie opublikowane przez user1786647 i trochę go zaktualizowałem, aby zmienić strefę czasową na argument funkcji i dodać opcjonalną obsługę przekazywania uniksowego ciągu czasu lub ciągu daty i godziny do użycia dla zwróconego znacznika danych.
Zawiera również rezerwę dla „setTimestamp” dla użytkowników z wersją niższą niż PHP 5.3:
echo now();//2020-03-10 22:10
echo now()->addDay(1);//2020-03-11 22:10
echo now()->addDay(1)->addHour(1);// //2020-03-11 23:10
echo now()->addDay(1)->addHour(1)->addMinute(30);// //2020-03-11 23:40
echo now()->addDay(1)->addHour(1)->addMinute(30)->addSecond(10);// //2020-03-11 23:50//or u can use get method for example
echo now()->addDay(1)->addHour(1)->addMinute(30)->get();// //2020-03-11 23:40
Dlaczego ktoś miałby potrzebować całej klasy dla czegoś, co można całkowicie zaspokoić w jednym wierszu kodu?!? Jeśli coś w tym TLDR jest wartościowe, jest to właściwa odpowiedź na złe pytanie.
mickmackusa
ponieważ teraz jest przedmiotem za każdym razem
dılo sürücü
OP poprosił tylko o określony sformatowany ciąg daty. Nic więcej. Brak manipulacji datą i godziną. To jest prawidłowa odpowiedź na złe pytanie.
mickmackusa
edytowałem kod powtórz spójrz na kod ...
dılo sürücü
Twoja edycja skopiowała sugerowane rozwiązanie z 3 z 5 najlepszych odpowiedzi na tej stronie. Przyczyniasz się do wzdęcia strony (zbędne treści i porady poza zakresem), co nie jest dobre dla Stackoverflow.
Odpowiedzi:
Nie tylko funkcja daty :
źródło
date_default_timezone_set
funkcjiZajrzyj tutaj, aby uzyskać więcej informacji: http://pl.php.net/manual/en/function.date.php
źródło
W wersji PHP> = 5.4 DateTime może to zrobić: -
Zobacz, jak działa .
źródło
Użyj tej funkcji:
źródło
Spróbuj tego:
źródło
Krótka odpowiedź
Długa odpowiedź znajduje się poniżej.
Naśladowanie funkcji MySQL NOW () w PHP
Oto lista sposobów naśladowania
NOW()
funkcji MySQL w PHP .Myślę, że
date_create()->format('Y-m-d H:i:s')
to najlepszy sposób, ponieważ takie podejście pozwala łatwiej obsługiwać czas / strefę czasowądate('Y-m-d H:i:s')
i działa od php 5.2.Funkcja MySQL NOW ()
Funkcja MySQL
NOW()
daje wartość datetime w formacie:'YYYY-MM-DD HH:MM:SS'
. Zobacz tutaj: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now .Ciekawym faktem jest to, że można uzyskać format daty i godziny, uruchamiając to zapytanie:
SHOW VARIABLES LIKE 'd%e_format'
wynik może wyglądać mniej więcej tak:Zmienne tutaj są zmiennymi tylko do odczytu. Więc nie możesz tego zmienić.
Myślę, że
NOW()
funkcja MySQL pobiera format zedatetime_format
zmiennej.Zalety funkcji date_create () -> format () zamiast date () podsumowanie
Korzystne fakty
date_create('now')->format('Y-m-d H:i:s')
ponaddate('Y-m-d H:i:s')
to:Wady date_create () -> format () zamiast date ()
Funkcja
date()
ma nieco lepszą wydajność niżdate_create()->format()
. Zobacz test porównawczy poniżej.Wielkie litery pokazują, że
date()
jest szybszy. Jeśli jednak zmienimy nieco scenariusz testowy, wynik będzie inny. Patrz poniżej:Metoda DateTime:
format()
jest tutaj szybsza niżdate()
.Zalety date_create () -> format () zamiast date () szczegółowe
Czytaj dalej, aby uzyskać szczegółowe wyjaśnienie.
łatwiejsze do manipulowania czasem
date_create()
akceptuje format względna data / czas (jaknow
,yesterday
lub+1 day
) zobaczyć ten link , na przykład:date()
akceptuje również względny format daty / godziny, taki jak ten:łatwiejsza obsługa stref czasowych
Kiedy stref czasowych znaczenia następnie użycie
date_create()->format()
sprawia, że wiele większy sens wtedydate()
, ponieważdate()
używa domyślnej strefy czasowej, który jest skonfigurowanyphp.ini
wdate.timezone
dyrektywie. Link: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .Możliwa jest zmiana strefy czasowej w czasie wykonywania. Przykład:
date_default_timezone_set('Asia/Tokyo');
.Wadą tego jest to, że wpłynie to na wszystkie funkcje daty / godziny. Ten problem nie istnieje, jeśli używasz go
date_create()->format()
w połączeniu ztimezone_open()
.PHP obsługuje główne strefy czasowe. Zabawne jest to, że obsługuje nawet koło podbiegunowe i Antarktydę. Czy kiedykolwiek słyszałeś o
Longyearbyen
? Jeśli nie, to nie martw się, ja też nie przeczytałem oficjalnej dokumentacji PHP.Zobacz listę wszystkich obsługiwanych stref czasowych: http://php.net/manual/en/timezones.php .
ooo
OOP używa obiektów pełnych stanu. Wolę więc myśleć w ten sposób:
Następnie pomyśl w ten sposób:
Dlatego powiedziałbym, że to
date_create()->format()
podejście jest dla mnie bardziej czytelnedate()
.date_create () VS nowy DateTime ()
Korzystne fakty
date_create()
ponadnew DateTime()
to:Przestrzenie nazw
Jeśli pracujesz w przestrzeni nazw i chcesz zainicjować obiekt DateTime za pomocą nowego słowa kluczowego, musisz to zrobić w następujący sposób:
Nie ma w tym nic złego, ale wadą tego jest to, że ludzie czasami zapominają o odwrotnym ukośniku. Korzystając z
date_create()
funkcji konstruktora, nie musisz się martwić o przestrzenie nazw.Przykład date_create () -> format ()
Używam tego podejścia do moich projektów, jeśli muszę wypełnić tablicę. Lubię to:
źródło
Szukałem tej samej odpowiedzi i wymyśliłem to rozwiązanie dla PHP 5.3 lub nowszego:
źródło
Funkcja MySQL
NOW()
zwraca bieżący znacznik czasu. Jedyny sposób, jaki znalazłem dla PHP, to użycie następującego kodu.źródło
Jeszcze jedna odpowiedź, którą uważam za łatwą w użyciu:
Jest to data ISO 8601 (dodana w PHP 5), której używa MySQL
Edytować
MySQL 5.7 domyślnie nie zezwala na strefę czasową w czasie danych. Możesz wyłączyć błąd za pomocą
SQL_MODE=ALLOW_INVALID_DATES
. Aby uzyskać więcej informacji, zobacz odpowiedź tutaj: https://stackoverflow.com/a/35944059/2103434 . Ale oznacza to również, że strefa czasowa zostanie utracona podczas zapisywania w bazie danych!Domyślnie MySQL używa strefy czasowej systemu i tak długo, jak PHP używa tej samej strefy czasowej nie powinno być problemu. W moim przypadku CET / UTC + 2.
Oznacza to, że jeśli wstawię
2015-07-27T00:00:00+02:00
do bazy danych, tylko2015-07-27T00:00:00
będą przechowywane (ale to jest właściwy czas lokalny!).Kiedy ponownie załaduję czas do PHP,
automatycznie przyjmie
+02:00
strefę czasową, ponieważ jest domyślna. Drukowanie to będzie znowu poprawne:Aby być bezpiecznym, zawsze używaj UTC na serwerze, określ go w MySQL i PHP, a następnie przekonwertuj na ustawienia regionalne użytkownika tylko podczas wyświetlania daty:
źródło
Użyj
strftime
:%F
jest taki sam jak%Y-%m-%d
.%T
jest taki sam jak%H:%M:%S
.Oto demo na ideone.
źródło
Lub możesz użyć
DateTime
stałych :Oto ich lista:
Do debugowania wolę jednak krótszy ( 3v4l.org ):
źródło
Podoba mi się rozwiązanie opublikowane przez user1786647 i trochę go zaktualizowałem, aby zmienić strefę czasową na argument funkcji i dodać opcjonalną obsługę przekazywania uniksowego ciągu czasu lub ciągu daty i godziny do użycia dla zwróconego znacznika danych.
Zawiera również rezerwę dla „setTimestamp” dla użytkowników z wersją niższą niż PHP 5.3:
źródło
Możesz użyć funkcji daty PHP z poprawnym formatem jako parametrem,
źródło
Nie ma wbudowanej
now()
funkcji PHP , ale możesz to zrobić za pomocądate()
.Przykład
Możesz użyć,
date_default_timezone_set()
jeśli chcesz zmienić strefę czasową.W przeciwnym razie możesz skorzystać z Carbon - prostego rozszerzenia API PHP dla DateTime.
źródło
Jeśli chcesz mieć teraz czas, w tym AM / PM
Wyprowadza
2020-05-01 05:45:28 pm
lub
Wyprowadza
2020-05-01 05:45:28 PM
źródło
wkrótce
php zaawansowane teraz klasa dodatkowy addMinute addYear jako taki addHour itp ...
za pomocą
źródło
Odpowiednikiem PHP jest
time()
: http://php.net/manual/en/function.time.phpźródło
time() Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).