Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php strotime()不';t使用dd/mm/YYYY格式_Php - Fatal编程技术网

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/yd-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') }}