当前位置: 首页 > 知识库问答 >
问题:

PHP DateTime::__construct():在年份为三位数时解析时间字符串失败

钦枫
2023-03-14

我有一个Symfony控制器,它接收来自客户端的请求,必须将输入的日期(例如12-12-2004)解析为DateTime对象,并将其存储在数据库中。它工作得很好,除非我尝试输入一个包含三位数年份的日期,例如:

DateTime::__construct():在位置7(4)解析时间字符串(12-12-940)失败:意外字符

代码本身是非常简单的,我只是调用new /DateTime从客户端请求的值。

共有2个答案

叶国兴
2023-03-14

DateTime的构造函数无法处理三位数的年份。一种可能的解决方案是以如下方式使用setDate()

$dateString = "12-12-940";
list($day, $month, $year) = explode('-', $dateString);

$date = new DateTime();
$date->setDate($year, $month, $day);
公良扬
2023-03-14

错误消息告诉您一切。DateTime应为四位数的年份。如果您的年份只有三位数,则必须添加填充零。new\DateTime(“12-12-0940”) 工作正常。

要填充字符串,可以使用str_pad

$padded_year str_pad($year, 4, '0', STR_PAD_LEFT);

您还可以将此代码与array_map相结合,将日期字符串拆分并连接到正确的填充日期字符串,如

$date = "2-2-940";
$date = join('-', array_map(function($number, $padding) {
    return str_pad($number, $padding, '0', STR_PAD_LEFT);
}, explode('-', $date), [2,2,4]));

 类似资料:
  • 我从另一个表中提取DateTime时间戳结果,该表设置为: 当倾销特定价值的

  • 我在工作中遇到了一个问题。在这个函数中,我想选择合作者,其中日期出生是现在的日期。但问题是我有一个错误,比如:在Creator中。php第80行: DateTime::__construct():解析时间字符串失败(22/03/1983)位置0(2):意外字符 我需要帮助 提前感谢

  • 我有一个格式有时间戳的字符串 “2021-02-04 23:45:00”但是当我尝试用time.parse解析它时,它似乎切断了年份部分。 代码是 其中此时的record[i]是一个字符串 2021-02-04 00:15:00 和阅读。间隔就是时间。时间 Printf中返回的错误是 我在我做过的任何搜索中都找不到。我在这里错过了什么?

  • 问题内容: 我遇到了将“星期几”字符串转换为值的问题。我找不到包中内置的任何内容。 然后,我编写了这个简单的函数(满足了我的需求): 还有其他 建议 或 更惯用的 方式在Golang中执行此转换吗? 谢谢! 问题答案: 前言: 我在中发布了此实用程序,请参见。 是的,使用映射而不是数组,因此查找更快,更简单: 测试它: 输出(在Go Playgorund上尝试): 小费: 您甚至可以使用循环来安全

  • 我有一个字符串时间格式。我没有找到任何格式来解析这个字符串值。有没有办法将这个字符串值转换为Gotime.Time? 编辑 - 这不是重复的问题。我知道如何解析,但我不知道我们可以使用时间格式包中列出的任何布局。这个答案清除了我的涂鸦。

  • 问题内容: 我有一个日期时间字符串,我不知道如何在Python中解析它。 字符串是这样的: 我试过了 但是Python引发 根据Python文档: %z UTC偏移量,格式为+ HHMM或-HHMM(如果对象是天真对象,则为空字符串)。 解析此时间字符串的正确格式是什么? 问题答案: 时区解析有问题。看一下包装: