Pregunta

Tengo las fechas en el siguiente formato (aaaammdd, 18751104, 19140722)...¿cuál es la forma más fácil de convertir a la fecha()....o es el uso de la función mktime() y subcadenas mi mejor opción...?

¿Fue útil?

Solución

Uso strtotime() para convertir una cadena que contiene una fecha en un Timestamp de Unix:

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

Usted puede pasar el resultado como segundo parámetro date() volver a formatear la fecha de ti mismo:

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

Nota

strtotime() se producirá un error con las fechas antes de la época Unix en el inicio de 1970.

Como una alternativa que va a trabajar con fechas 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
?>

Otros consejos

En lo personal, me gustaría sólo tiene que utilizar substr () porque es probablemente la forma más ligera a hacerlo de todos modos.

Pero aquí es una función que toma una fecha, de los cuales se puede especificar el formato. Devuelve un array asociativo, por lo que podría hacer por ejemplo (no probado):

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

http://uk.php.net/ manual de / en / function.date-análisis sintáctico-from-format.php

Aunque debo decir, no me parece que sea más fácil o más eficaz que simplemente:

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

echar un vistazo a strptime

Bueno, gracias por todas las respuestas, pero el problema 1900 parece plagar cada respuesta que obtuve. Aquí está una copia de la función que estoy usando debería alguien que le resulte útil para ellos en el 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):

Se puede obtener una instancia DateTime con:

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

y convertirla en una marca de tiempo:

$timestamp = $dateTime->getTimestamp();
// -> -2342217600
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top