Php strotime()不';t使用dd/mm/YYYY格式
我非常喜欢Php strotime()不';t使用dd/mm/YYYY格式,php,Php,我非常喜欢strotime()函数,但是用户手册没有给出支持的日期格式的完整描述strotime('dd/mm/YYYY')不起作用,它仅适用于mm/dd/YYYY格式 如果我有dd/mm/YYYY格式的日期,如何将其转换为yyy-mm-dd? 我可以通过使用explode()函数来实现,但我认为有更好的解决方案。以下是简化的解决方案: $date = '25/05/2010'; $date = str_replace('/', '-', $date); echo date('Y-m-d', s
strotime()
函数,但是用户手册没有给出支持的日期格式的完整描述strotime('dd/mm/YYYY')
不起作用,它仅适用于mm/dd/YYYY
格式
如果我有dd/mm/YYYY
格式的日期,如何将其转换为yyy-mm-dd
?
我可以通过使用
explode()
函数来实现,但我认为有更好的解决方案。以下是简化的解决方案:
$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));
结果:
2010-05-25
内容如下:
通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式中的日期歧义:如果分隔符是斜杠(/),则假定为美式m/d/y;然而,如果分隔符是破折号(-)或点(),则假定为欧洲d-m-y格式
我还没有找到更好的解决办法。您可以使用
explode()
,preg\u match\u all()
等
我有一个这样的静态助手函数
class Date {
public static function ausStrToTime($str) {
$dateTokens = explode('/', $str);
return strtotime($dateTokens[1] . '/' . $dateTokens[0] . '/' . $dateTokens[2]);
}
}
可能有一个更好的名称,但我使用了
ausstrotime()
,因为它适用于澳大利亚日期(作为澳大利亚人,我经常处理这个问题)。更好的名称可能是标准化名称,但我不确定这是什么。您是否从数据库中获取此值?如果是这样,考虑在数据库中格式化它(例如,在MySQL中使用代码> DATEOFFLASH < /COD>)。如果不是,分解值可能是最好的选择,因为strotime似乎不喜欢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/YY或dd/mm/YYYY(或两者的任意组合)的形式匹配日期
如果您想支持比/更多的分隔符,可以将正则表达式更改为:
$regex = '#([\d]{1,2})[/-]([\d]{1,2})[/-]([\d]{2,4})#';
然后将您想要的任何字符添加到
[/-]
位(注意,-字符必须是最后一个)您可以使用
(旁白:!
用于将非指定值重置为Unix时间戳,即时间为午夜。)
如果您不想(或不能)使用PHP5.3,那么strotime接受的可用日期/时间格式的完整列表将在手册页面上列出。该页更详细地描述了
m/d/Y
是通过d/m/Y
推断出来的(但是,正如在这里的答案中提到的,您可以使用d-m-Y
,d.m.Y
或d\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,但它不会从strotime writeup检查日期是否有效
注:
通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式的日期歧义:如果分隔符是斜杠(/),则假定为美式m/d/y;而如果分隔符是破折号(-)或点(.),则假定为欧洲d-m-y格式
就这么简单。此解决方案比explode更简单、更优雅:
$my_date = str_replace("/", ".", $my_date);
$my_date = strtotime($my_date);
$my_date = date("Y-m-d", $my_date);
你不必知道日期的格式,但是如果它带有斜杠,它们会被替换为句号,并且strotime会将其视为欧洲格式。我尝试将ddmmyy格式转换为
日期(“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”,strotime($strParam));
成功了!
$srchDate=date\u格式(date\u create\u from\u格式('d/m/Y',$srchDate),'Y/m/d');
这对你有用。
您可以将字符串转换为自定义日期格式,在该格式中,您可以向PHP指定给定给它的字符串的原始格式。
现在它是一种日期格式,您可以将其转换为PHP的默认日期格式,这与MySQL使用的格式相同。这就是我使用的解决方案,即使前面有零
<?php
$date = '05/05/2017';
$date = str_replace('/', '-', $date);
$date = date('Y-m-d', strtotime($date));
echo $date;
?>
$date\u info='20/02/2019';
回显日期('Y-m-d',strotime(str_replace('/','-',$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
替代使用拉维
\Carbon\Carbon::parse($a->dates)->format('d F Y') }}
@Web逻辑我无法忍受strotime()函数的默认格式,如果我写strotimr('01-01-2010'),它会理解为dd-mm-YYYY或mm-dd-yyyyy格式?如果你用:
echo-date('Y-m-l',strotime('01-01-2010')测试它;
结果是2010-01-Friday
。因此,最后一天的到来取决于您如何为date
函数指定日期格式。虽然您在此处发布的内容是正确的,并回答了用户的问题,但这是解决实际问题的一种迂回方式。为了让strotime()正确解析格式中的日期“dd/mm/yy”,您需要将“/”替换为“-”。因此,您只需要答案的前两行:$date='25/05/2010';$date=str_replace(“/”,“-”,$date);
额外的一行对于解决您的问题是不必要的。这仅在日期大于12:$date='1/2/34';/2034年2月1日时才是正确的('d M Y',strotime($date));//2034年1月2日谢谢,伙计。真是让我高兴。你的正则表达式应该使用\d
作为十进制数字,而不是[/d]
用于正斜杠或d字符。我们可以实现这一点,因为它们不会给出错误,但当我选中时,$t
和$t1
显示不同的结果。我是这样检查的。$t=strotime(date('d-m-Y');
和$t1=strotime(date('m/d/Y');
Yo
{{ date('d F Y',strtotime($a->dates)) }}
\Carbon\Carbon::parse($a->dates)->format('d F Y') }}