Извлечение нескольких форматов даты из нескольких строковых переменных в php - PullRequest
0 голосов
/ 07 декабря 2011

Мне нужно извлечь дату из строковой переменной, и дата форматируется в различных форматах, как показано ниже:

$date1 = "03/12/2011 (Sat)";
$date2 = "3.12.2011 SAT";
$date3 = "Date: 03/12/2011 "; /* <-- the extra trailing space is intentional */
$date4 = "date:03/12/2011";
$date5 = "date: 03/12/2011";
$date6 = "03/12/2011";
$date7 = "13.12.2011 TUE";

Каков наилучший способ создать функцию PHP, которая будет работать для всех указанных выше входных переменных при извлечении правильной информации о дате?

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Дополнительную информацию об объекте DateTime, возвращаемом функцией, смотрите в документации PHP для DateTime класса .

/**
 * Parses date from string
 * @param string $str Uncorrected date string
 * @return DateTime PHP datetime object
 */
function date_grab($str)
{
  // regex pattern will match any date formatted dd-mm-yyy or d-mm-yyyy with
  // separators: periods, slahes, dashes
  $p = '{.*?(\d\d?)[\\/\.\-]([\d]{2})[\\/\.\-]([\d]{4}).*}';
  $date = preg_replace($p, '$3-$2-$1', $str);
  return new \DateTime($date);
}

// verify that it works correctly for your values:
$arr = array(
  "03/12/2011 (Sat)",
  "3.12.2011 SAT",
  "Date: 03/12/2011 ", /* <-- the extra trailing space is intentional */
  "date:03/12/2011",
  "date: 03/12/2011",
  "03/12/2011"
);

foreach ($arr as $str) {
  $date = date_grab($str);
  echo $date->format('Y-m-d') . "\n";
}
0 голосов
/ 07 декабря 2011

Вы можете использовать приведенную ниже функцию, она будет соответствовать всем переменным, которые вы указали.

function extractDates($mydate)
{
    $date = explode(" ", $mydate);
    $output = $date[0];
    if ($date[0] == "Date:" || $date[0] == "date:")
    {
        $output = $date[1];
    }

    return $output;
}

$date1 = "Date: 03/12/2011";
echo extractDates($date1);

Вывод будет таким, как вы ожидали: «03.12.2011».

Вы также можете проверить все свои строки:

$date1 = "03/12/2011 (Sat)";
$date2 = "3.12.2011 SAT";
$date3 = "Date: 03/12/2011 "; /* <-- the extra trailing space is intentional */
$date4 = "date:03/12/2011";
$date5 = "date: 03/12/2011";
$date6 = "03/12/2011";
$date7 = "13.12.2011 TUE";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...