Hướng dẫn php create datetime from iso 8601 - php tạo datetime từ iso 8601

Không ai được đề cập để sử dụng DATE_ATOM theo như tôi biết PHPS thực hiện đúng nhất ISO 8601. ít nhất nó sẽ hoạt động trong 3 trong số này:

format(DATE_ATOM)
);

foreach($dates as $d) {

    $res = \DateTime::createFromFormat(DATE_ATOM, $d);

    echo "try $d: \n";
    var_dump($res);
    echo "\n\n";
}

?>

Để có thể phân tích tất cả chúng, tôi đã viết một chức năng nhỏ:

 0) {
        return $success[0];
    }
    return false;
}

// Test
$dates = array(
    "2010-12-07T23:00:00.000Z",
    "2010-12-07T23:00:00",
    "2010-12-07T23:00:00Z",
    "2010-12-07T23:00:00+01:00",
    (new \DateTime("now"))->format(DATE_ATOM)
);

foreach($dates as $d) {

    $res = parse_iso_8601($d);

    echo "try $d: \n";
    var_dump($res);
    echo "\n\n";
}

?>

Như @glutexo đã đề cập, nó chỉ hoạt động nếu chỉ có 1 đến 6 chữ số chính xác cho phần thập phân. Hãy thoải mái để cải thiện nó.

$ dateTime-> setTimezone (new \ datetimezone ('zulu')));

echo "cần sử dụng định dạng ('u') và so sánh những người khi được coi là số nguyên" ";

echo'now với phân số (p): '. \ DateTime :: createdFromFormat ('U.U', Sprintf ('%. 6f', microtime (true)))-> định dạng ('y-m-d \ th: i: s.up');
echo'now với phân số (o): '. \ DateTime :: createdFromFormat ('U.U', Sprintf ('%. 6f', microtime (true)))-> định dạng ('y-m-d \ th: i: s.uo'); 'default locale: ' . \Locale::getDefault();
echophp_eol; PHP_EOL;
echo "cần sử dụng định dạng ('u') và so sánh những người khi được coi là số nguyên" "; 'default timezone: ' . \date_default_timezone_get();
echophp_eol; PHP_EOL;
echo'now với phân số (p): '. \ DateTime :: createdFromFormat ('U.U', Sprintf ('%. 6f', microtime (true)))-> định dạng ('y-m-d \ th: i: s.up');
echo'now với phân số (o): '. \ DateTime :: createdFromFormat ('U.U', Sprintf ('%. 6f', microtime (true)))-> định dạng ('y-m-d \ th: i: s.uo');
Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều
Tầng ($ datetime-> định dạng ("u") / 1000),dt2 = \DateTime::createFromFormat('Y-m-d\TH:m:i.uO', '2012-10-17');
Echo'default Locale: '. \ Locale :: getDefault ();$dt2); // false
Echo'default Timezone: '. \ date_default_timezone_get ();dt2 = new \DateTime('2012-10-17');
// Xem http://tools.ietf.org/html/rfc3339#section-5.8 '2012-10-17 formatted => ' . $dt2->format('Y-m-d\TH:i:s.uP');
echophp_eol; PHP_EOL;
// Báo cáo lỗi về hỗ trợ phân số bị thiếu: https://bugs.php.net/bug.php?id=51950dt3 = \DateTime::createFromFormat('Y-m-d\TH:m:i.uO', '1990-12-31T23:59:60Z'); // leap second
// Yêu cầu tính năng hỗ trợ phân số trong Constructor: https://bugs.php.net/bug.php?id=49779$dt3); // false
$ dt2 = \ dateTime :: createdFromFormat ('y-m-d \ th: m: i.uo', '2012-10-17');dt3 = new \DateTime('1990-12-31T23:59:60Z');
var_dump ($ dt2); // sai '1990-12-31T23:59:60Z formatted => ' . $dt3->format('Y-m-d\TH:i:s.uP');
echophp_eol; PHP_EOL;
$ dt2 = new \ dateTime ('2012-10-17');dt4 = \DateTime::createFromFormat(\DateTime::ISO8601, '2004-02-13T15:19:21+00:00');
echo'2012-10-17 được định dạng => '. $ dt2-> định dạng ('y-m-d \ th: i: s.up'); '2004-02-13T15:19:21+00:00 formatted => ' . $dt4->format('Y-m-d\TH:i:s.uP');
echophp_eol; PHP_EOL;
$ dt3 = \ dateTime :: createdFromFormat ('y-m-d \ th: m: i.uo', '1990-12-31t23: 59: 60z'); // Bước nhảy vọt thứ haidt5 = \DateTime::createFromFormat('Y-m-d\TH:m:i.uO', '1985-04-12T23:20:50.52Z');
var_dump ($ dt3); // sai '1985-04-12T23:20:50.52Z formatted => ' . $dt5->format('Y-m-d\TH:i:s.uP');
echophp_eol; PHP_EOL;
$ dt3 = new \ dateTime ('1990-12-31t23: 59: 60z'); '\DateTime::createFromFormat(DateTime::ISO8601, "1985-04-12T23:20:50.52Z") => ';
echo'1990-12-31T23: 59: 60Z định dạng => '. $ dt3-> định dạng ('y-m-d \ th: i: s.up');datetime = \DateTime::createFromFormat(\DateTime::ISO8601, '1985-04-12T23:20:50.52Z');
$ dt4 = \ dateTime :: createdFromFormat (\ datetime :: iso8601, '2004-02-13t15: 19: 21+00: 00');$datetime);
echo'2004-02-13t15: 19: 21+00: 00 định dạng => '. $ dt4-> định dạng ('y-m-d \ th: i: s.up'); 'new \DateTime("1985-04-12T23:20:50.52Z") => ';
$ dt5 = \ dateTime :: createdFromFormat ('y-m-d \ th: m: i.uo', '1985-04-12t23: 20: 50.52z');datetime = new \DateTime('1985-04-12T23:20:50.52Z');
$ dt4 = \ dateTime :: createdFromFormat (\ datetime :: iso8601, '2004-02-13t15: 19: 21+00: 00');$datetime);
echo'2004-02-13t15: 19: 21+00: 00 định dạng => '. $ dt4-> định dạng ('y-m-d \ th: i: s.up'); '1985-04-12T23:20:50.52Z formatted (P) => ' . $datetime->format('Y-m-d\TH:i:s.uP');
echophp_eol; PHP_EOL;
$ dt5 = \ dateTime :: createdFromFormat ('y-m-d \ th: m: i.uo', '1985-04-12t23: 20: 50.52z');
$ dt5 = \ dateTime :: createdFromFormat ('y-m-d \ th: m: i.uo', '1985-04-12t23: 20: 50.52z');datetime = new \DateTime('1985-04-12T23:20:50.52Z');
$ dt4 = \ dateTime :: createdFromFormat (\ datetime :: iso8601, '2004-02-13t15: 19: 21+00: 00');$datetime);
echo'2004-02-13t15: 19: 21+00: 00 định dạng => '. $ dt4-> định dạng ('y-m-d \ th: i: s.up');datetimez = clone $datetime;
$ dt5 = \ dateTime :: createdFromFormat ('y-m-d \ th: m: i.uo', '1985-04-12t23: 20: 50.52z');datetime->setTimeZone(new \DateTimeZone('Zulu'));
echo'1985-04-12t23: 20: 50,52z định dạng => '. $ dt5-> định dạng ('y-m-d \ th: i: s.up');datetime->setTimeZone(new \DateTimeZone('Etc/UTC'));
echo '\ dateTime :: createdFromFormat (datetime :: iso8601, "1985-04-12t23: 20: 50.52z") =>';datetime->setTimeZone(new \DateTimeZone('UTC'));
$ dateTime = \ dateTime :: createdFromFormat (\ datetime :: iso8601, '1985-04-12T23: 20: 50.52z'); '1985-04-12T23:20:50.52Z clone Z formatted => ' . $datetime->format('Y-m-d\TH:i:s.u\Z');
echophp_eol; PHP_EOL;
var_dump ($ datetime); '1985-04-12T23:20:50.52Z clone Z formatted => ' . $datetime->format('Y-m-d\TH:i:s.uP');
echophp_eol; PHP_EOL;
echo'New \ dateTime ("1985-04-12T23: 20: 50.52z") => ';iso8601_p = sprintf(
$ dateTime = new \ dateTime ('1985-04-12T23: 20: 50.52z');%s%03d%s",
Echo'1985-04-12T23: 20: 50,52z được định dạng (p) => '. $ dateTime-> định dạng ('y-m-d \ th: i: s.up');datetime->format("Y-m-d\TH:i:s\."),
// $ dateTime = \ dateTime :: createdFromFormat ('c', '1985-04-12t23: 20: 50.52z'); // thất bại$datetime->format("u") / 1000),
$ datetimez = clone $ dateTime;datetime->format("P")
$ dateTime-> setTimezone (new \ datetimezone ('zulu')));
$ dateTime-> setTimezone (new \ datetimezone ('etc/utc'))); '1985-04-12T23:20:50.52Z clone custom formatted P => ' . $iso8601_p;
echophp_eol; PHP_EOL;
$ dateTime-> setTimezone (new \ datetimezone ('utc')));iso8601_z = sprintf(
echo'1985-04-12t23: 20: 50.52z clone z định dạng => '. $ dateTime-> định dạng ('y-m-d \ th: i: s.u \ z');%s%03dZ",
Echo'1985-04-12T23: 20: 50,52z được định dạng (p) => '. $ dateTime-> định dạng ('y-m-d \ th: i: s.up');datetime->format("Y-m-d\TH:i:s\."),
// $ dateTime = \ dateTime :: createdFromFormat ('c', '1985-04-12t23: 20: 50.52z'); // thất bại$datetime->format("u") / 1000)
$ dateTime-> setTimezone (new \ datetimezone ('zulu')));
$ dateTime-> setTimezone (new \ datetimezone ('etc/utc'))); '1985-04-12T23:20:50.52Z clone custom formatted Z => ' . $iso8601_z;
echophp_eol; PHP_EOL;
echo '\ dateTime :: diff () với các phân số của độ chi tiết thứ hai là không thể có được'; '\DateTime::diff() with fractions of a second granularity is not possible…';
echophp_eol; PHP_EOL;
echo "cần sử dụng định dạng ('u') và so sánh những người khi được coi là số nguyên" "; "Propably need to use format('u') and compare those when treated as integer…";
echophp_eol; PHP_EOL;
echo "cần sử dụng định dạng ('u') và so sánh những người khi được coi là số nguyên" "; 'NOW with fractions (P): ' . \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)))->format('Y-m-d\TH:i:s.uP');
echophp_eol; PHP_EOL;
echo "cần sử dụng định dạng ('u') và so sánh những người khi được coi là số nguyên" "; 'NOW with fractions (O): ' . \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)))->format('Y-m-d\TH:i:s.uO');
echophp_eol; PHP_EOL;