Eu gostaria de enfatizar como você e @troelskn enviaram a mesma resposta em 3 de janeiro de 2010 às 17:08, mas ele ainda obteve ~ 800 votos a mais. O envio da sua resposta foi provavelmente segundos a menos do dele. :) Obrigado por escrever de qualquer maneira: D
Aleksandar
9 segundos depois (visível se você passar o mouse "respondido")
Grzegorz Oledzki
110
Com a versão PHP> = 5.4, o DateTime pode fazer isso: -
boa ideia envolver o construtor e formatá-lo da maneira certa.
Acme
enfim php começou a copiar a partir de Delphi e C # :)
Erçin Dedeoğlu
1
isso pode ser bom, mas não responde à pergunta, não é mais fácil nem mais rápido fazê-lo dessa maneira #
582
8
@ Asped De que forma isso não responde à pergunta? É uma função PHP que "retorna a data e hora no mesmo formato que a função MySQL NOW ()", que é precisamente a questão.
precisa saber é o seguinte
@vascowhite - a questão era se existe uma função específica para esse propósito. então a resposta é NÃO. todas as outras possibilidades listadas aqui podem estar funcionando e a sua também é boa, mas não ajuda, pois o cara que perguntava já sabia como fazê-lo, mas queria uma função mais simples e única, que a sua não é :)
Asped
34
Use esta função:
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');}
Certo, se você desperdiçar personagens assim, ficaremos sem eles.
quer
4
sim meu mau tempo () actualy não é necessário
streetparade
15
8 caracteres, na verdade.
Henrik Erlandsson
52
considerando todo o lixo por aqui, acho que é muito vergonhoso ele usou aspas
Augie Gardner
37
Imagine todos os personagens desperdiçados em comentar sobre o desperdício de personagens!
Pwnball
25
Resposta curta
$now = date_create()->format('Y-m-d H:i:s');
Leia abaixo a resposta longa.
A imitação da função NOW () do MySQL no PHP
Aqui está uma lista de maneiras no PHP que imitam a NOW()função MySQL .
// 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);
Eu acho que date_create()->format('Y-m-d H:i:s')é a melhor maneira, porque essa abordagem permite que você lide com manipulações de fuso horário / fuso horário com mais facilidade do que date('Y-m-d H:i:s')e funciona desde o php 5.2.
Um fato interessante é que é possível obter o formato datetime executando esta consulta:, SHOW VARIABLES LIKE 'd%e_format'o resultado pode ser algo como isto:
Quando fusos horários importa então o uso de date_create()->format()marcas muito mais sentido, em seguida, date()porque date()usa o fuso horário padrão que é configurado no php.inina date.timezonedirectiva. Link: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .
É possível alterar o fuso horário durante o tempo de execução. Exemplo:
date_default_timezone_set('Asia/Tokyo');.
A desvantagem disso é que isso afetará todas as funções de data / hora. Esse problema não existe se você estiver usando date_create()->format()em combinação com timezone_open().
O PHP suporta os principais fusos horários. O engraçado é que ele ainda suporta o círculo ártico e a Antártica. Você já ouviu falar sobre isso Longyearbyen? Caso contrário, não se preocupe, nem o fiz até ler a documentação oficial do PHP.
OOP usa objetos com estado completo. Então, prefiro pensar dessa maneira:
// 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');
Então, pense desta maneira:
// 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'));
Portanto, eu diria que a date_create()->format()abordagem é mais legível para mim date().
date_create () VS novo DateTime ()
Os fatos favoráveis do date_create()excesso new DateTime()são:
Namespaces
Namespaces
Se você trabalha em um espaço para nome e deseja inicializar um objeto DateTime com a nova palavra-chave, faça o seguinte:
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();
Não há nada de errado nisso, mas a desvantagem acima é que as pessoas esquecem esporadicamente a barra invertida. Usando a date_create()função construtora, você não precisa se preocupar com espaços para nome.
$dt = date_create();// in or not in a namespace it works in both situations
Exemplo de date_create () -> format ()
Eu uso essa abordagem para meus projetos se precisar preencher uma matriz. Como isso:
Esta é a data da ISO 8601 (adicionada no PHP 5) que o MySQL usa
Editar
O MySQL 5.7 não permite o fuso horário na data e hora por padrão. Você pode desativar o erro com SQL_MODE=ALLOW_INVALID_DATES. Veja a resposta aqui para obter mais detalhes: https://stackoverflow.com/a/35944059/2103434 . Mas isso também significa que o fuso horário será perdido ao salvar no banco de dados!
Por padrão, o MySQL usa o fuso horário do sistema e, enquanto o PHP usa o mesmo fuso horário, você deve ficar bem. No meu caso, CET / UTC + 2.
Isso significa que, se eu inserir 2015-07-27T00:00:00+02:00no banco de dados, apenas 2015-07-27T00:00:00serão armazenados (mas essa é a hora local correta!).
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
Para depuração, prefiro uma versão mais curta ( 3v4l.org ):
Gosto da solução postada por user1786647 e atualizei-a um pouco para alterar o fuso horário para um argumento de função e adicionar suporte opcional para passar uma seqüência de horário ou hora do Unix para usar no carimbo de data e hora retornado.
Ele também inclui um fallback para "setTimestamp" para usuários que executam versão inferior ao 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
Por que alguém precisaria de uma classe inteira para algo que possa ser completamente satisfeito em uma linha de código?!? Se alguma coisa neste TLDR é valiosa, é a resposta certa para a pergunta errada.
mickmackusa 12/03
porque agora é objeto toda vez
dılo sürücü 12/03
O OP solicitou apenas uma sequência de datas formatada específica. Nada mais. Nenhuma manipulação de data / hora. Esta é a resposta certa para a pergunta errada.
mickmackusa 12/03
Eu editei o código, repito, olhe o código ...
dılo sürücü 13/03
Sua edição copiou a solução sugerida de 3 das 5 principais respostas desta página. Você está contribuindo para o inchaço da página (conteúdo redundante e conselhos fora do escopo) e isso não é bom para o Stackoverflow.
Respostas:
Além da função de data :
fonte
date_default_timezone_set
funçãoVeja aqui mais detalhes: http://pl.php.net/manual/en/function.date.php
fonte
Com a versão PHP> = 5.4, o DateTime pode fazer isso: -
Veja trabalhando .
fonte
Use esta função:
fonte
Tente o seguinte:
fonte
Resposta curta
Leia abaixo a resposta longa.
A imitação da função NOW () do MySQL no PHP
Aqui está uma lista de maneiras no PHP que imitam a
NOW()
função MySQL .Eu acho que
date_create()->format('Y-m-d H:i:s')
é a melhor maneira, porque essa abordagem permite que você lide com manipulações de fuso horário / fuso horário com mais facilidade do quedate('Y-m-d H:i:s')
e funciona desde o php 5.2.Função MySQL NOW ()
A função MySQL
NOW()
fornece o valor dateTime neste formato:'YYYY-MM-DD HH:MM:SS'
. Consulte aqui: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_now .Um fato interessante é que é possível obter o formato datetime executando esta consulta:,
SHOW VARIABLES LIKE 'd%e_format'
o resultado pode ser algo como isto:As variáveis aqui em cima são variáveis somente leitura. Então você não pode mudar isso.
Eu acho que a
NOW()
função MySQL obtém o formato dadatetime_format
variável.As vantagens do date_create () -> format () em vez do date () resumo
Os fatos favoráveis do
date_create('now')->format('Y-m-d H:i:s')
excessodate('Y-m-d H:i:s')
são:As desvantagens de date_create () -> format () em vez de date ()
A função
date()
tem um desempenho um pouco melhor quedate_create()->format()
. Veja teste de benchmark abaixo.A maiúscula mostra que
date()
é mais rápido. No entanto, se mudarmos um pouco o cenário de teste, o resultado será diferente. Ver abaixo:O método DateTime:
format()
é mais rápido aqui do quedate()
.As vantagens de date_create () -> format () em vez de date () detalhadas
Continue lendo para obter uma explicação detalhada.
mais fácil de lidar com manipulações de tempo
date_create()
aceita um formato de data relativa / hora (comonow
,yesterday
ou+1 day
) ver este link , por exemplo:date()
aceita também um formato de data / hora relativo, assim:mais fácil de lidar com fusos horários
Quando fusos horários importa então o uso de
date_create()->format()
marcas muito mais sentido, em seguida,date()
porquedate()
usa o fuso horário padrão que é configurado nophp.ini
nadate.timezone
directiva. Link: http://php.net/manual/en/datetime.configuration.php#ini.date.timezone .É possível alterar o fuso horário durante o tempo de execução. Exemplo:
date_default_timezone_set('Asia/Tokyo');
.A desvantagem disso é que isso afetará todas as funções de data / hora. Esse problema não existe se você estiver usando
date_create()->format()
em combinação comtimezone_open()
.O PHP suporta os principais fusos horários. O engraçado é que ele ainda suporta o círculo ártico e a Antártica. Você já ouviu falar sobre isso
Longyearbyen
? Caso contrário, não se preocupe, nem o fiz até ler a documentação oficial do PHP.Veja uma lista de todos os fusos horários suportados: http://php.net/manual/en/timezones.php .
oop
OOP usa objetos com estado completo. Então, prefiro pensar dessa maneira:
Então, pense desta maneira:
Portanto, eu diria que a
date_create()->format()
abordagem é mais legível para mimdate()
.date_create () VS novo DateTime ()
Os fatos favoráveis do
date_create()
excessonew DateTime()
são:Namespaces
Se você trabalha em um espaço para nome e deseja inicializar um objeto DateTime com a nova palavra-chave, faça o seguinte:
Não há nada de errado nisso, mas a desvantagem acima é que as pessoas esquecem esporadicamente a barra invertida. Usando a
date_create()
função construtora, você não precisa se preocupar com espaços para nome.Exemplo de date_create () -> format ()
Eu uso essa abordagem para meus projetos se precisar preencher uma matriz. Como isso:
fonte
Eu estava procurando a mesma resposta e encontrei esta solução para o PHP 5.3 ou posterior:
fonte
A função MySQL
NOW()
retorna o registro de data e hora atual. A única maneira que encontrei para o PHP é usando o código a seguir.fonte
Acho que mais uma resposta é fácil de usar:
Esta é a data da ISO 8601 (adicionada no PHP 5) que o MySQL usa
Editar
O MySQL 5.7 não permite o fuso horário na data e hora por padrão. Você pode desativar o erro com
SQL_MODE=ALLOW_INVALID_DATES
. Veja a resposta aqui para obter mais detalhes: https://stackoverflow.com/a/35944059/2103434 . Mas isso também significa que o fuso horário será perdido ao salvar no banco de dados!Por padrão, o MySQL usa o fuso horário do sistema e, enquanto o PHP usa o mesmo fuso horário, você deve ficar bem. No meu caso, CET / UTC + 2.
Isso significa que, se eu inserir
2015-07-27T00:00:00+02:00
no banco de dados, apenas2015-07-27T00:00:00
serão armazenados (mas essa é a hora local correta!).Quando carrego o tempo de volta no PHP,
assumirá automaticamente seu
+02:00
fuso horário, já que é o padrão. Imprimir isso estará correto novamente:Para estar seguro, sempre use o UTC no servidor, especifique-o no MySQL e PHP e depois converta-o para a localidade do usuário ao exibir a data:
fonte
Use
strftime
:%F
é o mesmo que%Y-%m-%d
.%T
é o mesmo que%H:%M:%S
.Aqui está uma demonstração sobre ideone.
fonte
Ou você pode usar
DateTime
constantes :Aqui está a lista deles:
Para depuração, prefiro uma versão mais curta ( 3v4l.org ):
fonte
Gosto da solução postada por user1786647 e atualizei-a um pouco para alterar o fuso horário para um argumento de função e adicionar suporte opcional para passar uma seqüência de horário ou hora do Unix para usar no carimbo de data e hora retornado.
Ele também inclui um fallback para "setTimestamp" para usuários que executam versão inferior ao PHP 5.3:
fonte
Você pode usar a função de data PHP com o formato correto como parâmetro,
fonte
Não há
now()
função PHP embutida, mas você pode fazê-lo usandodate()
.Exemplo
Você pode usar
date_default_timezone_set()
se precisar alterar o fuso horário.Caso contrário, você poderá usar o Carbon - uma extensão simples da API do PHP para o DateTime.
fonte
Se você deseja obter tempo agora, incluindo AM / PM
Produz
2020-05-01 05:45:28 pm
ou
Produz
2020-05-01 05:45:28 PM
fonte
Em breve
PHP avançado agora classe extra addMinute addYear como tal addHour etc ...
usando
fonte
O equivalente ao PHP é
time()
: http://php.net/manual/en/function.time.phpfonte
time() Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).