Pergunta

Eu tenho datas no seguinte formato (AAYYYMMDD, 18751104, 19140722) ... Qual é a maneira mais fácil de convertê -lo para data () ... ou está usando mktime () e substrings minha melhor opção ...?

Foi útil?

Solução

Usar strtotime() para converter uma string contendo uma data em um UNIX Timestamp:

<?php
// both lines output 813470400
echo strtotime("19951012"), "\n",
     strtotime("12 October 1995");
?>

Você pode passar o resultado como o segundo parâmetro para date() Para reformatar a data:

<?php
// prints 1995 Oct 12
echo date("Y M d", strtotime("19951012"));
?>

Observação

strtotime() falhará com as datas antes da época da UNIX no início de 1970.

Como uma alternativa que funcionará com as datas antes de 1970:

<?php
// Returns the year as an offset since 1900, negative for years before
$parts = strptime("18951012", "%Y%m%d");
$year = $parts['tm_year'] + 1900; // 1895
$day = $parts['tm_mday']; // 12
$month = $parts['tm_mon']; // 10
?>

Outras dicas

Pessoalmente, eu apenas usaria o substr () porque é provavelmente a maneira mais leve de fazê -lo de qualquer maneira.

Mas aqui está uma função que leva uma data, da qual você pode especificar o formato. Ele retorna uma matriz associativa, para que você possa fazer, por exemplo (não testado):

$parsed_date = date_parse_from_format('Ymd', $date);
$timestamp = mktime($parsed_date['year'], $parsed_date['month'], $parsed_date['day']);

http://uk.php.net/manual/en/function.date-parse-from-format.php

Embora eu deva dizer, não acho isso mais fácil ou mais eficaz do que simplesmente:

mktime(substr($date, 0, 4), substr($date, 4, 2), substr($date, 6, 2));

dê uma olhada em strptime

Bem, obrigado por todas as respostas, mas o problema de 1900 parece atormentar todas as respostas que recebi. Aqui está uma cópia da função que estou usando, caso alguém ache útil para eles no futuro.

public static function nice_date($d){
    $ms = array(
           'January',
           'February',
           'March',
           'April',
           'May',
           'June',
           'July',
           'August',
           'September',
           'October',
           'November',
           'December'
    );

    $the_return = '';
    $the_month = abs(substr($d,4,2));
    if ($the_month != 0) {
        $the_return .= $ms[$the_month-1];
    }

    $the_day = abs(substr($d,6,2));
    if ($the_day != 0){
        $the_return .= ' '.$the_day;
    }

    $the_year = substr($d,0,4);
    if ($the_year != 0){
        if ($the_return != '') {
            $the_return .= ', ';
        }
        $the_return .= $the_year;
    }

    return $the_return;
}

(Php 5> = 5.3.0, Php 7):

Você pode obter uma instância do DateTime com:

$dateTime = \DateTime::createFromFormat('Ymd|', '18951012');

e convertê -lo em um registro de data e hora:

$timestamp = $dateTime->getTimestamp();
// -> -2342217600
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top