0

我有这样的以下日期

20120809

我想用'-'把它分开,然后把它变成

2012-08-09

使用正则表达式。

有没有使用 PHP 的简单解决方案?一切都会好的。

4

5 回答 5

4

你可以使用date_parse_from_format文档在这里。在您的情况下,这将导致:

date_parse_from_format('Ymd',$dateIn);

返回一个数组,因此您几乎可以从那里开始随心所欲

正如@Rocket 所说,您还可以获得该DateTime对象,它也为您提供了各种好东西。更多要阅读的文档;)

于 2012-09-13T15:56:26.320 回答
3

使用date()strtotime()

date('Y-m-d',strtotime('20120809'));
于 2012-09-13T15:58:24.063 回答
2

同意其他人您不需要正则表达式来执行此操作,但是...

preg_replace('/(\d{4})(\d\d)(\d\d)/', '\1-\2-\3', $str);

但是,使用 PHP,您可以使用substr_replace插入破折号:

$str = substr_replace($str, '-', 4, 0);
$str = substr_replace($str, '-', 7, 0);
于 2012-09-13T15:55:07.497 回答
2

如果你想使用正则表达式,这很简单。只需\d与量词一起使用,如{4}.

preg_replace('/(\d{4})(\d{2})(\d{2})/', '$1-$2-$3', '20120809');
于 2012-09-13T15:55:42.007 回答
1

对这件事使用正则表达式是完全错误的,有更好的方法来做到这一点,比如 substr() ...

但这是你想要的:

<?php

$string = '20120809';

preg_match( '/(\d{4})(\d{2})(\d{2})/', $string, $parts);

unset($parts[0]);

$result = implode('-', $parts); //2012-08-09

?>
于 2012-09-13T16:02:30.547 回答