Как использовать функцию обрезки для удаления времени из функции NOW () - PullRequest
0 голосов
/ 12 июня 2018

Давайте у меня будет переменная, подобная этой:

$date_posting = 2018-06-12 16:37:13

Теперь я хочу обрезать ее, чтобы время было удалено, а осталась только дата.Так что это будет примерно так:

$date_posting = 2018-06-12

Итак, мой вопрос, как я могу это сделать с помощью функции обрезки?

Ответы [ 4 ]

0 голосов
/ 12 июня 2018

Поскольку trim и rtrim удаляют концы строки на основе указанных символов, не рекомендуется использовать их, так как это не даст желаемых результатов.

Нежелательный пример: https://3v4l.org/XdKBp

$date_posting = '2018-06-12 20:37:13';
var_dump(trim($date_posting, ' 20:37:13')); //undesirable

Результаты:

string(5) "8-06-"

Если в строке даты / времени всегда используется формат HH:MM:SSальтернативный метод trim будет использовать substr для удаления количества символов справа от строки, представляющей часть времени.

Пример: https://3v4l.org/fD0TU

$date_posting = '2018-06-12 16:37:13';
$date_posting = substr($date_posting, 0, -9);
var_dump($date_posting);

Результаты:

string(10) "2018-06-12"

Поскольку substr не обеспечивает проверки значения даты ввода, я предлагаю использовать DateTime::createFromFormat для извлечения даты из текстового представления даты / времени.Использование ожидаемого формата даты Y-m-d.Вместе с дополнительным флагом данных: +, который будет игнорировать временную часть текста в предоставленной дате.

Пример: https://3v4l.org/TVPSO

$date_posting = '2018-06-12 16:37:13';
if ($date = DateTime::createFromFormat('Y-m-d+', $date_posting)) {
    $date_posting = $date->format('Y-m-d');
} else {
    //invalid date supplied
}
var_dump($date_posting);

Результаты:

string(10) "2018-06-12"

Это решение обеспечит приемлемый формат предоставленной даты ($date_posting) (Y-m-d) или возврат false.В отличие от разбора произвольной строки, например explode(' ', 'hello world') или preg_split('/[\s+]/', 'Foo Bar').

Чтобы опционально потребовать проверки части времени в принятом формате, вы можете изменить формат с:

Y-m-d+ на Y-m-d H:i:s


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

Пример: https://3v4l.org/DGbHE

$date_posting = '2018-06-12 16:37:13';
$date_posting = preg_replace('/ \d{2}:\d{2}:\d{2}$/', '', $date_posting);
var_dump($date_posting);

Приведенное выше решениене позволит вам проверить часть текста в дате.

Чтобы добавить проверку даты в шаблон, вы можете использовать круглые скобки для захвата части текста в виде даты и использовать ее вместо $1.

Пример: https://3v4l.org/djfrL

$date_posting = '2018-06-12 16:37:13';
$date_posting = preg_replace('/^(\d{4}-\d{2}-\d{2}) \d{2}:\d{2}:\d{2}$/', '$1', $date_posting);
var_dump($date_posting);

Результат:

string(10) "2018-06-12"

Как вы упомянули NOW() в заголовке и отобразите полученное значение в виде 2018-06-12 16:37:13.Это заставляет меня думать, что вы используете запрос MySQL для определения переменной $date_posting php.

Если вы хотите получить только часть даты из функции MySQL NOW(), вы можете использовать * 1081.* или если вы извлекаете его из столбца таблицы DATETIME, вы можете использовать SELECT DATE(column_name) AS date_string FROM table_name.И то, и другое приведет к тому, что будет извлечена только часть даты в тексте.

Пример: http://sqlfiddle.com/#!9/c0430b/2

0 голосов
/ 12 июня 2018

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

Вы должны проанализировать дату, а затем извлечь часть "date".

$d = strtotime("2018-06-12 16:37:13"); // 1528810633
date('Y-m-d', $d); // 2018-06-12

Редактировать:

Какупоминается в комментариях, это может привести к проблемам с часовым поясом, если сервер / клиент / дБ настроен правильно, то вы можете разделить строку, используя:

$arr = explode(' ', '2018-06-12 16:37:13');
// $arr[0] = '2018-06-12'
// $arr[1] = '16:37:13'

Но это, очевидно, не лучшая практика.

0 голосов
/ 12 июня 2018

вам нужно создать объект даты и формат даты.

$date_posting = '2018-06-12 16:37:13';
$date_posting = new DateTime($date_posting);
$date_posting = $date_posting->format('Y-m-d');
var_dump($date_posting);
0 голосов
/ 12 июня 2018

Используйте preg_split вместо trim.

Как это:

$arr = preg_split("/[\s]+/", $date_posting);
// $arr[0] == '2018-06-12'
// $arr[1] == '16:37:13'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...