如何使用trim函数从NOW()函数中删除时间

时间:2018-06-12 12:53:34

标签: php datetime

我有一个这样的变量:

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

现在我想修剪它,所以时间将被移除,只剩下日期。所以它会是这样的:

$date_posting = 2018-06-12

所以我的问题是如何使用修剪功能来做到这一点?

4 个答案:

答案 0 :(得分:3)

您需要创建日期对象和格式日期。

$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);

答案 1 :(得分:2)

您无法使用trim功能。

你应该解析日期,然后提取"日期"部分。

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

编辑:

如评论中所述,这可能会导致时区问题,如果正确配置了server / client / db,那么您可能希望使用以下命令拆分字符串:

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

但这显然不是最好的做法。

答案 2 :(得分:1)

使用preg_split代替trim

像这样:

$arr = preg_split("/[\s]+/", $date_posting);
// $arr[0] == '2018-06-12'
// $arr[1] == '16:37:13'

答案 3 :(得分:1)

由于trimrtrim根据指定的字符删除字符串的末尾,因此不建议使用它们,因为它不会产生所需的结果。

不受欢迎的例子: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()中检索日期部分,您也可以使用SELECT DATE(NOW()),或者如果您从DATETIME表格列中检索它,可以使用SELECT DATE(column_name) AS date_string FROM table_name。两者都只会导致文本的日期部分被检索。

示例:http://sqlfiddle.com/#!9/c0430b/2