Преобразование до настоящего времени в PHP от формата yyyymmdd

У меня есть даты в следующем формате (yyyymmdd, 18751104, 19140722)..., что самый легкий путь состоит в том, чтобы преобразовать его до настоящего времени ().... или использует mktime () и подстроки мой наилучший вариант...?

11
задан Serhiy 26 February 2010 в 21:27
поделиться

4 ответа

Использовать strtotime () для преобразования строки, содержащей дату, в метку времени Unix :

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

Вы можете передать результат в качестве второго параметра в date () , чтобы самостоятельно переформатировать дату :

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

Примечание

strtotime () завершится ошибкой с датами до эпохи Unix в начале 1970 года.

В качестве альтернативы, которая будет работать с датами до 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
?>
37
ответ дан 3 December 2019 в 01:13
поделиться

взгляните на strptime

0
ответ дан 3 December 2019 в 01:13
поделиться

Что ж, спасибо за все ответы, но проблема 1900 года, кажется, мешает каждому ответу, который я получил. Вот копия функции, которую я использую, если кто-то сочтет ее полезной для них в будущем.

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;
}
0
ответ дан 3 December 2019 в 01:13
поделиться

Лично я бы просто использовал substr (), потому что это, вероятно, самый легкий способ сделать это в любом случае.

Но вот функция, которая принимает дату, для которой вы можете указать формат. Он возвращает ассоциативный массив, поэтому вы можете, например, (непроверено):

$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

Хотя я должен скажем, я не считаю это проще или эффективнее, чем просто:

mktime(substr($date, 0, 4), substr($date, 4, 2), substr($date, 6, 2));
7
ответ дан 3 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: