Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 日期\u从\u格式创建\u不会返回预期结果_Php_Date_Datetime - Fatal编程技术网

Php 日期\u从\u格式创建\u不会返回预期结果

Php 日期\u从\u格式创建\u不会返回预期结果,php,date,datetime,Php,Date,Datetime,我刚试过 date_create_from_format('Ym','201302') 我猜因为今天是29号,它实际上是在3月1日把我送回来 我希望能回来2013-02-01 00:00:00 是否有其他函数可以“正确”解析日期?如果没有,我可以自己提取,没什么大不了的 如果格式不包含字符则生成的时间中未在格式中指定的部分将设置为当前系统时间 如果格式包含字符,然后是未以格式提供的部分生成时间,以及左侧的值,将设置为Unix历元中的相应值 Unix时代是UTC 1970-01-01 00:00

我刚试过

date_create_from_format('Ym','201302')
我猜因为今天是29号,它实际上是在3月1日把我送回来

我希望能回来
2013-02-01 00:00:00

是否有其他函数可以“正确”解析日期?如果没有,我可以自己提取,没什么大不了的

如果
格式
不包含字符
则生成的时间中未在
格式中指定的部分将设置为当前系统时间

如果
格式
包含字符
,然后是未以
格式提供的部分生成时间,以及
左侧的值,将设置为Unix历元中的相应值

Unix时代是UTC 1970-01-01 00:00:00。 ()

所以,添加一个
格式
字符串开头的code>应该可以解决您的问题

如果
格式
不包含字符
则生成的时间中未在
格式中指定的部分将设置为当前系统时间

如果
格式
包含字符
,然后是未以
格式提供的部分生成时间,以及
左侧的值,将设置为Unix历元中的相应值

Unix时代是UTC 1970-01-01 00:00:00。 ()

所以,添加一个
格式开头的code>字符串应该可以解决您的问题。

似乎可以很好地工作,但我还是开始编写一个替代方案:

function CompactStrToTime($str) {
    $year = strlen($str)>=4 ? substr($str,0,4) : date('Y');
    $month = strlen($str)>=6 ? substr($str,4,2) : 1;
    $day = strlen($str)>=8 ? substr($str,6,2) : 1;
    $hour = strlen($str)>=10 ? substr($str,8,2) : 0;
    $min = strlen($str)>=12 ? substr($str,10,2) : 0;
    $sec = strlen($str)>=14 ? substr($str,12,2) : 0;
    return mktime($hour,$min,$sec,$month,$day,$year);
}
看起来效果很好,但我还是开始写一个备选方案:

function CompactStrToTime($str) {
    $year = strlen($str)>=4 ? substr($str,0,4) : date('Y');
    $month = strlen($str)>=6 ? substr($str,4,2) : 1;
    $day = strlen($str)>=8 ? substr($str,6,2) : 1;
    $hour = strlen($str)>=10 ? substr($str,8,2) : 0;
    $min = strlen($str)>=12 ? substr($str,10,2) : 0;
    $sec = strlen($str)>=14 ? substr($str,12,2) : 0;
    return mktime($hour,$min,$sec,$month,$day,$year);
}

我不确定它是否也适用于PHP,但JavaScript开始用0计算月份。所以三月=2。不管怎样,
3月1日
就是你收到的确切结果吗?@Derija93:no。我仔细检查了一下
201302
gives
2013-03-01 13:37:04
201303
gives
2013-03-29 13:37:04
@Derija93基于零的月份仅在它以整数形式返回数据组件时,而不是在解析时。如果您想要一个月中的特定日期,则需要将其包含在字符串中,我不确定它是否也适用于PHP,但是JavaScript开始用0计算月份。所以三月=2。不管怎样,
3月1日
就是你收到的确切结果吗?@Derija93:no。我仔细检查了一下
201302
gives
2013-03-01 13:37:04
201303
gives
2013-03-29 13:37:04
@Derija93基于零的月份仅在它以整数形式返回数据组件时,而不是在解析时。如果您想要一个月中的特定日期,则需要将其包含在字符串中,否则它将使用今天的日期。+1这是正确的答案。使用示例:
echo date\u create\u from\u format(“!Ym”,“201302”)->format('Y-m-dh:i:s')+1这是正确答案。使用示例:
echo date\u create\u from\u format(“!Ym”,“201302”)->format('Y-m-dh:i:s')。如果您已经在使用DateTime,请不要将其与strotime、mktime和类似函数混合使用。但是,如果您仍然需要这段代码,您仍然可以缩短它,比如说。@Glavić:什么,通过添加默认值?我没有处理太多的日期,也不太关心它们是如何计算的:-)如果您已经在使用DateTime,请不要将它与strotTime、mktime和类似函数混合使用。但是,如果您仍然需要这段代码,您仍然可以缩短它,比如说。@Glavić:什么,通过添加默认值?我没有处理太多的日期,我也不太在乎它们是如何计算出来的:-)