为了账号安全,请及时绑定邮箱和手机立即绑定

DateTime 解析时间字符串失败

DateTime 解析时间字符串失败

PHP
哔哔one 2023-04-15 17:54:24
我在从 JSON 带来的数组中为每个项目传递 2 个日期和时间字符串。这些日期已成功存储在数组中,但DateTime由于某种原因函数不喜欢它们。我试过使用不同的格式,只是日期,只是时间,但没有任何效果。我提供了我正在使用的 JSON 文件和我的 PHP 测试文件。<?php     error_reporting(E_ALL);    ini_set('display_errors', 1);    $revokes = jsonDecode(file_get_contents("../revokes.json"), true);    $certificates = $revokes['certificates'];    // Prints the revokes array    // print_r($revokes);    $dates = array();    foreach ($certificates as $certificate_key => $certificate) {        $signed = $certificate['signed'];        $revoked = $certificate['revoked'];        $dates[] = array(            "signed" => $signed,            "revoked" => $revoked        );    }    // Prints the dates    // print_r($dates);    $intervals = array();    foreach ($dates as $key) {        $newTimeAdd = new DateTime($key["signed"]);        $newTimeRead = new DateTime($key["revoked"]);        $interval = $newTimeAdd->diff($newTimeRead);        // returns 0 on all elements of the interval array.        // var_dump($interval);        $intervals[] = $interval->days;//get days    }    if(!empty($intervals)) {        $average = average($intervals);    }    // Prints nothing    // print_r($intervals);     function average($arr) {        return array_sum($arr)/count($arr);    }PHP约会时间日期时间格式
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您的日期格式为欧洲格式 (DD/MM/YYYY),这意味着您需要使用DateTime::createFromFormat()指定正确的格式才能DateTime正确处理它。这是由于 P HP 在看到 NN/NN/NNNN 日期格式时假设美国日期格式。


<?php


$json = json_decode('{

    "lifeExp": "2 Days",

    "certificates": [

        {

            "name": "CCS Group Pte Ltd",

            "signed": "22/05/2020 10:31:00",

            "revoked": "23/05/2020 5:40:00",

            "files": {

                "p12": "certificates/:id/certificate.p12",

                "pem": "certificates/:id/certificate.pem",

                "key": "certificates/:id/certificate.key",

                "password": "certificates/:id/certificate.password"

            }

        },

        {

            "name": "Hoola Inc",

            "signed": "16/05/2020 12:40:00",

            "revoked": "19/05/2020 04:00:00",

            "files": {

                "p12": "certificates/:id/certificate.p12",

                "pem": "certificates/:id/certificate.pem",

                "key": "certificates/:id/certificate.key",

                "password": "certificates/:id/certificate.password"

            }

        }

    ]

}', true);


$signed = $json['certificates'][1]['signed'];

$revoked = $json['certificates'][1]['revoked'];


$newTimeAdd  = DateTime::createFromFormat('d/m/Y H:i:s', $signed);

$newTimeRead = DateTime::createFromFormat('d/m/Y H:i:s', $revoked);

$interval    = $newTimeAdd->diff($newTimeRead);

echo $interval->days;

输出


2


查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信