Преобразование строки в форматированную дату с использованием PHP - PullRequest
1 голос
/ 11 февраля 2012

У меня есть следующая строка:

$str = "Tuesday, February 21 at 7:30am at Plano B";

at Plano B является необязательным.Я хотел бы преобразовать его в: TUE 21 FEB 07:30

Ответы [ 3 ]

2 голосов
/ 11 февраля 2012
$str = "Tuesday, February 21 at 7:30am at Plano B";
$time = strtotime(trim(substr($str,0,(strrpos("at"))));
echo "Date: " . strtoupper(date('D d M H:i', $time));

Что вы подразумеваете под "в Plano B необязательно".Это иногда там, иногда нет?

В противном случае:

$str = "Tuesday, February 21 at 7:30am at Plano B";
preg_match("/[a-z]+, ([a-z]+ [0-9]{1,2}) at ([0-9]{1,2}:[0-9]{1,2}[am|pm])/i", $str, $match);

$time = strtotime($match[1] + ' ' + $match[2]);
echo "Date: " . strtoupper(date('D d M H:i', $time));

Всегда ли это "Plano B" или пусто?или это также может быть "Plano A" или что-то совершенно другое?

Смотрите здесь: http://regexr.com? 2vvuj

Но вы пропустили год в начальной строке, так что не могу разобрать как strtotime.Также вы хотите вывод без am / pm. Вы хотите использовать 24-часовое время?

Это не очень хороший способ, но без года я не думаю, что у нас есть большой выбор ..

preg_match("/([a-z]+), ([a-z]+) ([0-9]{1,2}) at ([0-9]{1,2}:[0-9]{1,2})([am|pm])/i", $str, $match);
$day = substr($match[1], 0, 3);
$mon = substr($match[2], 0, 3);
echo strtoupper($day . " " . $match[3] . " " . $mon . " " . $match[4]);
1 голос
/ 11 февраля 2012

Я хотел бы предложить немного другое решение, основанное на не так часто используемом strptime. Он использует предопределенный формат для разбора строки.

Пример:

<?php

// Specify a default timezone just in case one isn't set in php.ini.
date_default_timezone_set('America/Vancouver');

$str = "Tuesday, February 21 at 7:30am at Plano B";
if ($time = strptime($str, '%A, %B %e at %l:%M%P')) {
    // This will default to the current year.
    echo strtoupper(date('D d M H:i', mktime($time['tm_hour'], $time['tm_min'], 0, $time['tm_mday'], $time['tm_mon'])));
}

Выход:

SUN 01 SEP 07:30
0 голосов
/ 11 февраля 2012
// Strip the last at, if its not a time
if(!preg_match("/at [0-9]+:[0-9]+[ap]m$/", $str)) {
  $str = preg_replace("/at [^0-9].*/","",$str);
}

// Then convert to time
$time = strtotime($str);

// Then output in specified format
echo strtoupper(date("D d M h:i", $time));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...