Não sei como especificar meu tipo de dados como data e hora ou carimbo de data / hora, acho que precisarei dos dois, mas nos diferentes eventos. Meu site vende produtos e serviços em todo o mundo e também possui um sistema de contas para o usuário efetuar login. Esclareça o seguinte:
- Data e hora atuais em que o cliente compra produtos do meu site: Data e hora?
- Data e hora da entrega com base em sua localização e data / hora da compra, calculadas em nosso sistema: Data e hora?
A última vez que eles acessaram sua conta: Registro de data e hora?
- Qual é o código no php para armazenar a data de compra (data atual) e depois armazenar no banco de dados?
- Por favor, elabore como usar cada um deles, pois, depois de ler muitas explicações na internet, ainda não entendi direito.
Respostas:
Timestamps do MySQL :
São armazenados no UTC
Eles são convertidos para UTC no armazenamento e convertidos de volta para o seu fuso horário na recuperação. Se você alterar as configurações de fuso horário , os valores recuperados também serão alterados.
Pode ser inicializado e atualizado automaticamente
Você pode definir o valor padrão e / ou o valor da atualização automática como
CURRENT_TIMESTAMP
Têm um alcance de
1970-01-01 00:00:01 UTC
até2038-01-19 03:14:07 UTC
Enquanto o MySQL datetime :
O que você armazena é o que você obtém ™.
Têm um alcance de
1000-01-01 00:00:00
até9999-12-31 23:59:59
Valores fora do intervalo podem funcionar - mas apenas valores dentro do intervalo são garantidos para funcionar.
Você pode armazenar datas em que dia ou mês é zero.
Esta é a maneira MySQL de armazenar aniversários! Você não pode fazer isso com a
TIMESTAMP
, com a única exceção sendo o valor zero de0000-00-00
.Você pode armazenar datas inválidas, se precisar delas, no modo ALLOW_INVALID_DATES .
Você pode definir o valor padrão
NOW()
em alguns casos, mas a maneira mais natural e preferível de datas inicializadas e atualizadas automaticamente éTIMESTAMP
.E é claro que também existem
DATE
eTIME
, que funcionam da mesma formaDATETIME
, mas é claroDATE
que não se preocupam com tempo eTIME
nem com data. Todos os quatro tipos de dados funcionam perfeitamente com a grande variedade de funções de data e hora , mas quando você está misturando tipos de dados, deve estar ciente dos efeitos de conversão .Agora, à sua pergunta: você deve usar em
DATETIME
qualquer lugar. Não por razões técnicas, mas como você ainda não sabe como o MySQL funciona,DATETIME
é a escolha mais simples. Isso significa que você terá que calcular o registro de data e hora atual no PHP antes de armazenar, é tão fácil quanto:A função date do PHP funciona como:
O
"Y-m-d H:i:s"
formato é compatível com o MySQL e, deixando o segundo parâmetro vazio,date()
chamatime()
para obter o registro de data e hora atual do UNIX .Usar um em
TIMESTAMP
vez de aDATETIME
tem o valor agregado do MySQL, assumindo a responsabilidade de decidir o carimbo de data / hora atual, e você pode pular o campo quando estiver inserindo / atualizando. Mas como você já está enviando uma consulta e o código para obter o registro de data e hora atual no PHP é mínimo, você pode ir com segurançaDATETIME
para tudo.Quanto ao código real para armazenar o registro de data e hora do PHP no banco de dados, você deve examinar o PHP Data Objects e, se ainda não estiver claro, pergunte no StackOverflow . Mas já existem quase 1,5 mil perguntas relacionadas , certifique-se de passar por elas antes de fazer. Apenas uma dica, declarações preparadas é como as crianças legais fazem isso.
fonte
Date
, uma palavra reservada para oDATE
tipo de dados e coisas estranhas podem acontecer (dependendo da versão do MySQL), então tente renomeá-lo para algo comocreationdate
e veja o que acontece . Além disso, no PHP você deve tratar osTIMESTAMP
campos da mesma forma que osDATETIME
campos, isso realmente não importa. O formato deles é o mesmo.Referência retirada deste artigo:
As principais diferenças:
TIMESTAMP usado para rastrear alterações nos registros e atualizar sempre que o registro é alterado. DATETIME usado para armazenar valores estáticos e específicos que não são afetados por nenhuma alteração nos registros.
O TIMESTAMP também é afetado por diferentes configurações relacionadas ao Fuso Horário. DATETIME é constante.
O TIMESTAMP converteu internamente o fuso horário atual em UTC para armazenamento e, durante a recuperação, converteu novamente no fuso horário atual. DATETIME não pode fazer isso.
Intervalo suportado TIMESTAMP: '1970-01-01 00:00:01' UTC para '2038-01-19 03:14:07' UTC DATETIME intervalo suportado: '1000-01-01 00:00:00' para '9999 -12-31 23:59:59 ′
fonte
Bem, eu olho para isso de uma maneira muito simples. No seu caso, eu usaria ambos
datetime
etimestamp
. Com o uso de ambos, você não terá problemas adicionais com o armazenamento de dados ou algo assim. Um campo adicional (coluna) na sua tabela também não é um grande problema.Então, no meu ponto de vista e experiências até agora, costumo usar os dois. Quando você quiser mostrar uma data para o visitante ou torná-la compreensível para os visitantes, exiba uma data no formato de data e hora.
O formato de data e hora pode ser um problema quando você deseja calcular algo (diferença entre duas datas, obter a data de ontem da data atual, obter uma semana atrás da data atual, obter a data de amanhã ou algo assim.) Não é realmente difícil, mas você geralmente precisa convertê-los
timestamp
e depois fazer as coisas. E sim data e hora atual, por exemplo, com:$current = date("Y-m-d");
ou$current = date("Y-m-d H:i:s");
se também deseja horas, minutos e segundos.O carimbo de data e hora é apenas um número com 11 dígitos, o que realmente não "significa" nada. Quando você olhar para ele, não saberá qual a data que representa. Portanto, não é realmente fácil de usar e você não pode usá-lo apenas para fazer eco e mostrá-lo aos visitantes, por exemplo. Você precisará "transformá-lo" em algo legível. Mas também oferece a capacidade de convertê-lo facilmente e calcular datas diferentes. Por exemplo, se você deseja obter o carimbo de data e hora de amanhã ao mesmo tempo, basta adicionar o número de segundos à data atual e ter o carimbo de hora de amanhã. Exemplo:
$tomorrow = time()+24*3600;
Você também pode obter facilmente uma diferença entre duas datas em segundos ou algo assim.Então, eu sugiro usar data e hora e carimbo de data / hora. Mesmo que você use, por exemplo, o PhpMyadmin e deseje analisar rapidamente alguns dados, será mais fácil para você quando vir uma data no formato de data e hora (exemplo:
2011-12-20 10:15:20
:), como será se você apenas olhar para o número de 11 dígitos. Portanto, use os dois e depois ligue e use o que melhor lhe convier.Se você deve ou deseja escolher apenas um, sugiro o carimbo de data / hora, caso contrário, use ambos.
fonte
Timestamp is just a number 11 digit long which doesn't really "mean" anything
registros de data e hora do MySQL são armazenados no mesmo formato que data e hora. Você também precisa convertê-los em carimbos de data e hora php, para fazer os cálculos descritos, ou simplesmente usar as muitas funções de data / hora do MySQL e fazer os cálculos no banco de dados. Sua resposta realmente não faz sentido.