Прег_сплит на 2 символа - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь разбить строку на 2 переменные (T & +), которые при использовании на «2018-06-25T10: 32: 00 + 01: 00» разбьют ее на: -

[0] => 2018-06-25
[1] => 10:32:00
[2] => 01:00

Так что я подумал, что могу использовать "preg_split (" / (T | +) / ", $ ent)", но он вообще не работает.

Мой код (на PHP): -

$ent = "2018-06-25T10:32:00+01:00";
print_r(preg_split("/ (T|\+) /", $ent));

Есть идеи, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Разбор дат в PHP - не лучший вариант использования для regex. Возможно, это лучший способ обработки дат на других языках, но , а не в PHP . PHP предоставляет DateTime классы , которые обрабатывают даты быстрее и безопаснее, чем ручной анализ.

Вот так должен выглядеть ваш код:

$date = new DateTime("2018-06-25T10:32:00+01:00");

echo $date->format('Y-m-d'), "\n";
echo $date->format('H:i:s'), "\n";
echo $date->format('P'), "\n";

Проверить результат: https://3v4l.org/gFvLp

Подробнее о классе DateTime и DateTime::format().

0 голосов
/ 02 июля 2018

Для вашего примера вы используете чередование с пробелами (T|\+), которые имеют значение.

Что вы можете сделать, это удалить пробелы и использовать (T|\+) или в качестве альтернативы использовать класс символов [T+]

$ent = "2018-06-25T10:32:00+01:00";
print_r(preg_split("/[T+]/", $ent));
0 голосов
/ 02 июля 2018

У вас есть проблема в вашем регулярном выражении. Вы можете дать это как ниже;

print_r(preg_split("/T|\+/", $ent));

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

$ent = '2018-06-25T10:32:00+02:00';
$datetime = new DateTime($ent);

$date = $datetime->format('Y-m-d');
$time = $datetime->format('H:i:s');
$offset = $datetime->getOffset() / 3600;

echo $date.'<br/>';
echo $time.'<br/>';
echo $offset.'<br/>';

Надеюсь, это поможет !!

...