将DateTime字符串转换为DateTime对象,返回布尔值而不是对象

时间:2019-06-14 11:08:24

标签: php sql iis ssms

编辑:@RiggsFolly帮助解决了这个问题,我使用的日期时间格式为H:i:00而不是H:i:s。

我需要比较许可证的注册日期和到期日期,我将两个日期都以字符串形式存储在ssms中,并以字符串形式检索它们,当我想将两者进行比较时,我尝试将它们都转换为DateTime对象,以便可以使用date_diff()进行比较,但是由于某些原因,我只能将到期日期转换为对象,注册日期始终返回布尔值。

所以我的代码的工作方式是,它首先检查$expirydate是否为空,如果不是,则它将输入条件并将$datetime创建为DateTime对象,然后创建var {{ 1}}来转换$datetime1并将其存储,并创建var $registrationdate以对$datetime2执行相同的操作。之后,如果日期未返回假值,则它将使用$expirydate进行比较,然后创建var date_diff(),以正/负整数形式存储两个日期之间的天差,例如+30或-3,它将用于显示用户许可证到期前的天数。

我很困惑为什么两个都是字符串值,但是只有一个可以转换为DateTime对象,而另一个则返回布尔值?

我尝试了3个将DateTime字符串转换为DateTime对象的选项:

  1. $validityperiod,但对于注册和有效期,它也会返回布尔值。

  2. date_create(),结果与上面相同,都返回布尔值。

  3. 创建一个date_create_from_format()对象并使用new DateTime()将其转换为DateTime对象,但它仅在到期日期而不是注册日期起作用,这是我能得到的最接近的至少可以将到期日期转换为DateTime对象。

createFromFormat()

每次从字符串到对象的转换返回布尔值时,都会返回以下错误:

  

警告:date_format()期望参数1为DateTimeInterface,给定布尔值

如果它可以将注册日期转换为DateTime对象,则它应该能够运行date_diff(),并且$ validityperiod应该存储两个日期之间的天数差异

1 个答案:

答案 0 :(得分:0)

您必须在

中使用正确的格式
$input.body

第二个是偶然的,因为您的时间实际上是在$datetime->createFromFormat('d/m/Y H:i:00', $expirydate); 秒内结束的,所以格式匹配,即

00

但是第一个日期与格式$expirydate="14/06/2019 16:46:00";` // --- ^^ 不匹配,因为它的秒数为:00,即

06

因此,对两者都使用正确的格式$registrationdate= "13/06/2019 15:06:06";` // ----------- ^^ ,您将获得正确创建的日期。