Strtotime ()不能使用 dd/mm/YYYY 格式

我非常喜欢 strtotime()函数,但是用户手册并没有给出支持的日期格式的完整描述。strtotime('dd/mm/YYYY')不工作,它只与 mm/dd/YYYY格式工作。

如果我有日期在 dd/mm/YYYY格式,我怎样才能把它转换成 YYYY-mm-dd? 我可以用 explode()函数做到这一点,但我认为有更好的解决方案。

387745 次浏览

这里有一个简化的解决方案:

$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));

结果:

2010-05-25

strtotime文件 内容如下:

< em > m/d/y < em > d-m-y 格式中的日期可以通过查看不同组件之间的分隔符来消除歧义: 如果分隔符是斜杠(/) ,则假定为美式 < em > m/d/y ; 而如果分隔符是破折号(-)或点(.) ,则假定为欧式 < em > d-m-y 格式。

我还没有找到更好的解决方案。你可以使用 explode()preg_match_all()等。

我有一个这样的静态助手函数

class Date {


public static function ausStrToTime($str) {
$dateTokens = explode('/', $str);
return strtotime($dateTokens[1] . '/' . $dateTokens[0] . '/' . $dateTokens[2]);


}


}

也许有一个更好的名字,但我使用 ausStrToTime(),因为它与澳大利亚的日期(我经常处理,作为一个澳大利亚人)。一个更好的名字可能是标准化的名字,但我不确定那是什么。

您是否从数据库中获取这个值?如果是这样,请考虑在数据库中对其进行格式化(例如,在 mysql 中使用 date_format)。如果没有,那么爆炸值可能是最好的选择,因为 strtotime 似乎并不欣赏 dd/mm/yyyy 值。

如果你知道它在 dd/mm/YYYY 中,你可以这样做:

    $regex = '#([/d]{1,2})/([/d]{1,2})/([/d]{2,4})#';
$match = array();
if (preg_match($regex, $date, $match)) {
if (strlen($match[3]) == 2) {
$match[3] = '20' . $match[3];
}
return mktime(0, 0, 0, $match[2], $match[1], $match[3]);
}
return strtotime($date);

日期将以 d/m/广州欢聚时代或 dd/mm/YYYY (或两者的任何组合)的格式匹配..。

如果希望支持比单纯/更多的分隔符,可以将正则表达式更改为:

    $regex = '#([\d]{1,2})[/-]([\d]{1,2})[/-]([\d]{2,4})#';

然后在 [/-]位中添加任意字符(注意,-字符必须是最后一个字符)

您可以使用 日期时间: : createFromFormat从自定义格式(从 PHP 5.3开始)解析日期

$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();

(另外: !用于将未指定的值重置为 Unix 时间戳,即时间为午夜。)


如果您不想(或者不能)使用 PHP 5.3,那么在 < em > 日期格式 手册页中列出了 strtotime 可以接受的完整的日期/时间格式列表。该页面更详细地描述了 m/d/Y是通过 d/m/Y推断出来的(但是,正如这里的答案所提到的,您可以使用 d-m-Yd.m.Yd\tm\tY)。


在过去,我还求助于另一个答案中提到的快速 str_replace,以及将日期字符串自解析为另一种格式,如

$subject   = '23/05/2010';
$formatted = vsprintf('%3$04d/%2$02d/%1$02d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);

最简单的解决办法是:

$date    = '07/28/2010';
$newdate = date('Y-m-d', strtotime($date));

这是解决许多问题的好办法:

function datetotime ($date, $format = 'YYYY-MM-DD') {


if ($format == 'YYYY-MM-DD') list($year, $month, $day) = explode('-', $date);
if ($format == 'YYYY/MM/DD') list($year, $month, $day) = explode('/', $date);
if ($format == 'YYYY.MM.DD') list($year, $month, $day) = explode('.', $date);


if ($format == 'DD-MM-YYYY') list($day, $month, $year) = explode('-', $date);
if ($format == 'DD/MM/YYYY') list($day, $month, $year) = explode('/', $date);
if ($format == 'DD.MM.YYYY') list($day, $month, $year) = explode('.', $date);


if ($format == 'MM-DD-YYYY') list($month, $day, $year) = explode('-', $date);
if ($format == 'MM/DD/YYYY') list($month, $day, $year) = explode('/', $date);
if ($format == 'MM.DD.YYYY') list($month, $day, $year) = explode('.', $date);


return mktime(0, 0, 0, $month, $day, $year);


}

最快的应该是

false!== ($date !== $date=preg_replace(';[0-2]{2}/[0-2]{2}/[0-2]{2};','$3-$2-$1',$date))

如果格式看起来不正确,这将返回 false,但它不会检查日期是否有效

来自 STRTOTIME 的文章 注:

M/d/y 或 d-m-y 格式的日期可以通过查看不同组件之间的分隔符来消除歧义: 如果分隔符是一个斜杠(/) ,那么假定是美式的 m/d/y; 而如果分隔符是一个破折号(-)或一个点(.)然后假定欧洲的 d-m-y 格式。

就这么简单。

这种解决方案比爆炸式解决方案更简单、更优雅:

$my_date = str_replace("/", ".", $my_date);
$my_date = strtotime($my_date);
$my_date = date("Y-m-d", $my_date);

你不需要知道日期是什么格式,但是如果有斜杠,它们就会被完整的句号所替代,并且在 strtotime 中被看作是欧洲的句号。

我尝试将 ddmmyy 格式转换为 date("Y-m-d"格式,但是当我直接传递 ddmmyy =date('dmy')时无法工作

然后意识到它必须是 yyyy-mm-dd 格式,所以用子串来组织

$strParam = '20'.substr($_GET['date'], 4, 2).'-'.substr($_GET['date'], 2, 2).'-'.substr($_GET['date'], 0, 2);

然后传给 date("Y-m-d",strtotime($strParam));

成功了!

$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');

这对你有用。 您可以将 String 转换为自定义日期格式,在这种格式中,您可以向 PHP 指定给它的 String 的原始格式。 现在它是一种日期格式,您可以将其转换为 PHP 的默认日期格式,这与 MySQL 使用的格式相同。

这就是我要用的解决方案,即使前导零在那里。

<?php
$date = '05/05/2017';
$date = str_replace('/', '-', $date);
$date = date('Y-m-d', strtotime($date));


echo $date;
?>

$date _ info = “20/02/2019”; Echo date (‘ Y-m-d’,strtotime (str _ place (’/’,’-’,$date _ info)) ;

就这么简单

date('Y-m-d H:i:s', strtotime( str_replace('/', '-', $from_date ) ) );

如果没用,试试这个。

$date = '25/05/2010'; //dd/mm/YYYY
$dateAr = explode('/',);
$date = $dateAr[2].'-'.$dateAr[1].'-'.$dateAr[0]; //YYYY-mm-dd
\{\{ date('d F Y',strtotime($a->dates)) }}

替代用途幼虫粪便

\Carbon\Carbon::parse($a->dates)->format('d F Y') }}