php中的日期解析未按预期返回

时间:2014-02-25 01:14:15

标签: php date

所以,我试图解析一个字符串,例如。 1-5-2014,DATE类型如下:

$todayArray = date_parse_from_format("n-j-Y", $row["whenn"]);
$news_date = strtotime($todayArray['year'].'-'.$todayArray['month'].'-'.$todayArray['day']);

但它返回1399909000.看起来它是导致问题的数组,但由于我对php的知识有限,我不知道出了什么问题。

提前谢谢你,

泰勒

2 个答案:

答案 0 :(得分:2)

$todayArray的值应该是这样的:

Array
(
    [year] => 2014
    [month] => 1
    [day] => 5
    [hour] => 
    [minute] => 
    [second] => 
    [fraction] => 
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 0
    [errors] => Array
        (
        )

    [is_localtime] => 
)

现在是字符串

$todayArray['year'].'-'.$todayArray['month'].'-'.$todayArray['day']

即。 "2014-1-5"strtotime的有效参数。但该函数将返回1393355280,与给定日期对应的UNIX timestamp,而这不是您要获取的内容。实际上,上面的字符串已经非常类似于您想要的输出。唯一的问题是$todayArray['month']$todayArray['day']的值需要在左侧填零。使用sprintf

可以轻松实现这一目标
$news_date = $todayArray['year'].'-'.sprintf("%02d", $todayArray['month']).'-'.sprintf("%02d", $todayArray['day']);

现在$news_date的值为"2014-01-05"

答案 1 :(得分:1)

您不想使用strtotime(),因为它只会将您的日期转换为Unix时间戳。使用DateTime()也比使用date_parse_from_format()更简单:

$date = DateTime::createFromFormat("n-j-Y", $row["whenn"]);
echo $date->format('Y-m-d');