Поскольку 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