Question

Je les dates dans le format suivant (yyyymmdd, 18751104, 19140722) ... ce qui est la meilleure façon de le convertir à ce jour () .... ou utilise mktime () et ma meilleure option sous-chaînes ...?

Était-ce utile?

La solution

strtotime() pour convertir une chaîne contenant une date dans un < a href = "http://en.wikipedia.org/wiki/Unix_time" rel = "noreferrer"> timestamp Unix :

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

Vous pouvez passer le résultat comme second paramètre date() reformater la date vous:

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

Remarque

strtotime() échouera avec des dates avant l'époque Unix au début de 1970.

Comme une alternative qui travaillera avec des dates avant 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
?>

Autres conseils

Personnellement, je venais d'utiliser substr () parce qu'il est probablement le plus léger façon de le faire de toute façon.

Mais voici une fonction qui prend une date dont vous pouvez spécifier le format. Elle retourne un tableau associatif, vous pouvez donc faire par exemple (non testé):

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

http://uk.php.net/ manuel / fr / function.date-parse-de-format.php

Bien que je dois dire que je ne trouve pas que plus facile ou plus efficace que simplement:

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

consulter strptime

Eh bien merci pour toutes les réponses, mais le problème 1900 semble peste chaque réponse que je suis arrivé. Voici une copie de la fonction que je utilise quelqu'un doit le trouver utile pour eux à l'avenir.

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):

Vous pouvez obtenir une instance DateTime avec:

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

et le convertir en un horodatage:

$timestamp = $dateTime->getTimestamp();
// -> -2342217600
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top