gpt4 book ai didi

php - 错误的日期对话(ndY 到 Y-m-d H :i:s)

转载 作者:搜寻专家 更新时间:2023-10-31 20:36:52 26 4
gpt4 key购买 nike

我的代码返回了错误的日期对话

<?php
$date = '8312015';
$newDate = DateTime::createFromFormat('ndY', $date);
$convertedDate = $newDate->format('Y-m-d H:i:s');
echo $convertedDate;

返回

0021-11-12 17:04:56

期望:

2015-08-31 00:00:00

问题:

  1. 为什么 PHP 不能将 ndY 转换为 Y-m-d H:i:s
  2. 为什么 PHP 附加当前时间,而不是 00:00:00

注意:我尝试使用 date()date_createdate_format 得到相同的结果(错误的日期)

最佳答案

太近了! m 实际上是:

Numeric representation of a month, with leading zeros 01 through 12

( http://php.net/manual/en/function.date.php )

所以,这意味着它期望它是 2 个字符,而不是一个。如果你这样做

$date = '08312015';
$newDate = DateTime::createFromFormat('ndY', $date);

一切如你所愿

当你这样做的时候

$date = '8312015';
$newDate = DateTime::createFromFormat('ndY', $date);

你得到 month=83, day=12, year=015

83个月是6年+11个月所以,015+6=21 years +11 months=21 年的 11 月 11 日,即 (0021-11-12),与输出匹配

编辑:显然你的意思是 n 而不是 m,问题是日期部分之间没有分隔符,所以,已经说过,关于月份应该是 8 还是 83 是模棱两可的...

再次编辑 我的“答案”只是解释了我猜想的问题,但没有说明如何解决它,所以...

如果字段不是由定界字符(如 -)或字段长度(即 m 总是 2 个字符)则转换不明确。显然 php 认为 83 是一个有效月份,并且格式为 n 的月份可能有 1 个或多个数字,当 php 看到 83 时,它真的不知道你的意思是“第 8 个月然后以 3"或“第 83 个月”开头的内容。

因此,您需要做的是消除定界的歧义。消除歧义的一种方法是在左侧填充 0,因为 d(以及出于所有意图和目的 Y)始终是相同数量的数字(2 和 4,分别)

所以,$date=str_pad($date, 8, "0", STR_PAD_LEFT); 会变成8312015 变成 08312015,然后你可以使用 m 来格式化而不是 n,你应该可以从那里开始。对于大于 9 个月的时间,它不会更改输入字符串,因此对于该 ndY 格式的所有字符串都是安全的。

关于php - 错误的日期对话(ndY 到 Y-m-d H :i:s),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33026796/

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