gpt4 book ai didi

php - 当系统时间为 3 月 30 日时,DateTime 转换错误

转载 作者:行者123 更新时间:2023-12-02 06:29:24 25 4
gpt4 key购买 nike

假设系统时间设置为2017-03-30。然后这段代码会把日期转换错:

<?php
$dateTime = DateTime::createFromFormat('m-Y', '02-2017');
$converted = $dateTime->format('Y-m');
print_r($converted);

$converted 的值为

2017-03

但仅当从浏览器运行时。从命令行运行,它给出了正确的结果 2017-02

谁知道为什么?二月没有 30 天,所以这可能是一个原因,但仍然如此。

编辑:将格式从“Y-m-d”更改为“Y-m”。

编辑 2:添加了有关命令行与浏览器的信息。

最佳答案

DateTime::__construct() 使用的规则, DateTime::createFromFormat()strtotime()解析各种日期和时间格式及其用于填充缺失组件的值在 the documentation 中进行了解释.

当它解析一个不完整的日期时,它使用当前日期和时间的值作为缺失的组成部分。

在您的特定情况下,02-2017 使用当前日期 (30) 转换为“2017 年 2 月”作为缺少的日期。 IE。 2017 年 2 月 30 日,然后标准化为 2017 年 3 月 2 日。

你可以告诉DateTime::createFromFormat()通过在格式字符串中放置感叹号 (!) 将所有组件初始化为 Unix 纪元(而不是当前日期和时间):

$dateTime = DateTime::createFromFormat('!m-Y', '02-2017');
print_r($dateTime);

输出:

DateTime Object
(
[date] => 2017-02-01 00:00:00.000000
[timezone_type] => 3
[timezone] => UTC
)

关于php - 当系统时间为 3 月 30 日时,DateTime 转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43740037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com