Estou tentando converter uma data de yyyy-mm-dd
para dd-mm-yyyy
(mas não no SQL); no entanto, não sei como a função date exige um carimbo de data / hora e não consigo obter um carimbo de data / hora dessa string.
Como isso é possível?
Estou tentando converter uma data de yyyy-mm-dd
para dd-mm-yyyy
(mas não no SQL); no entanto, não sei como a função date exige um carimbo de data / hora e não consigo obter um carimbo de data / hora dessa string.
Como isso é possível?
Respostas:
Use strtotime()
e date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(Veja a documentação sobre strtotime e date no site PHP.)
Observe que essa foi uma solução rápida para a pergunta original. Para conversões mais extensas, você realmente deve usar a DateTime
classe para analisar e formatar :-)
Se você deseja evitar a conversão do strtotime (por exemplo, o strtotime não pode analisar sua entrada), você pode usar,
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
Ou equivalente:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
Você está dando primeiro a ele o formato $ dateString. Depois, você está dizendo o formato em que deseja que $ newDateString esteja.
Ou se o formato de origem sempre for "Ymd" (aaaa-mm-dd), use apenas DateTime :
<?php
$source = '2012-07-31';
$date = new DateTime($source);
echo $date->format('d.m.Y'); // 31.07.2012
echo $date->format('d-m-Y'); // 31-07-2012
?>
DateTime::createFromFormat()
- é realmente mais útil questrtotime()
strtotime()
útil para converter o formato de tipo verdadeiro (Ymd) para outros formatos, mas DateTime::createFromFormat()
é universal. É como STR_TO_DATE
no MySQL
strtotime()
Usar:
implode('-', array_reverse(explode('-', $date)));
Sem a sobrecarga de conversão de datas, não tenho certeza se isso importará muito.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Este código funciona para todos os formatos de data.
Você pode alterar a ordem das variáveis de substituição, como $ 3- $ 1- $ 2, devido ao seu antigo formato de data.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Para mais, consulte a documentação parastrtotime
.
Ou ainda mais curto:
$new_date = date('d-m-Y', strtotime(your date variable));
Também outra possibilidade obscura:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Eu não sei se eu iria usá-lo, mas ainda :)
Nota : Como a resposta desta postagem às vezes é votada, voltei aqui para pedir às pessoas para não votarem mais. Minha resposta é antiga, não tecnicamente correta, e há várias abordagens melhores aqui. Só estou mantendo aqui para fins históricos.
Embora a documentação descreva mal a função strtotime, @rjmunro abordou corretamente o problema em seu comentário: está na data no formato ISO "AAAA-MM-DD".
Além disso, mesmo que minha função Date_Converter ainda funcione, gostaria de avisar que pode haver declarações imprecisas abaixo, portanto, desconsidere-as.
A resposta mais votada está realmente incorreta!
O manual do PHP strtotime aqui afirma que "A função espera receber uma string contendo um formato de data em inglês". O que realmente significa é que espera um formato de data americano nos EUA, como "mdY" ou "m / d / Y".
Isso significa que uma data fornecida como "Ymd" pode ser mal interpretada strtotime
. Você deve fornecer a data no formato esperado.
Eu escrevi uma pequena função para retornar datas em vários formatos. Use e modifique à vontade. Se alguém transformar isso em classe, ficaria feliz em compartilhar isso.
function Date_Converter($date, $locale = "br") {
# Exception
if (is_null($date))
$date = date("m/d/Y H:i:s");
# Let's go ahead and get a string date in case we've
# been given a Unix Time Stamp
if ($locale == "unix")
$date = date("m/d/Y H:i:s", $date);
# Separate Date from Time
$date = explode(" ", $date);
if ($locale == "br") {
# Separate d/m/Y from Date
$date[0] = explode("/", $date[0]);
# Rearrange Date into m/d/Y
$date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
}
# Return date in all formats
# US
$Return["datetime"]["us"] = implode(" ", $date);
$Return["date"]["us"] = $date[0];
# Universal
$Return["time"] = $date[1];
$Return["unix_datetime"] = strtotime($Return["datetime"]["us"]);
$Return["unix_date"] = strtotime($Return["date"]["us"]);
$Return["getdate"] = getdate($Return["unix_datetime"]);
# BR
$Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
$Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]);
# Return
return $Return;
} # End Function
Existem duas maneiras de implementar isso:
1
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2)
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
Você pode tentar a strftime()
função. Exemplo simples:strftime($time, '%d %m %Y');
Use esta função para converter de qualquer formato para qualquer formato
function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
$date_aux = date_create_from_format($from_format, $date);
return date_format($date_aux,$to_format);
}
Dado a seguir, está o código PHP para gerar a data de amanhã usando mktime()
e altere seu formato para formato dd / mm / aaaa e imprima-o usando echo
.
$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
Para essa conversão específica, também podemos usar uma string de formato.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Obviamente, isso não funcionará para muitas outras conversões de formato de data, mas como estamos reorganizando as substrings nesse caso, essa é outra maneira possível de fazer isso.
strtotime()
. :-)
function dateFormat($date) {
$m = preg_replace('/[^0-9]/', '', $date);
if (preg_match_all('/\d{2}+/', $m, $r)) {
$r = reset($r);
if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
}
}
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31
Maneira simples Use strtotime()
e date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Com tempo
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
Use date_create
edate_format
Tente isso.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}