我有一个这样的变量:
$date_posting = 2018-06-12 16:37:13
现在我想修剪它,所以时间将被移除,只剩下日期。所以它会是这样的:
$date_posting = 2018-06-12
所以我的问题是如何使用修剪功能来做到这一点?
答案 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)
由于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
删除右侧的字符数。表示时间部分的字符串。
$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
。除了额外的数据标记:+
,它将忽略提供日期中文本的时间部分。
$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
并使用适当的模式将其删除。
$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
的替换。
$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
。两者都只会导致文本的日期部分被检索。