编辑:@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对象的选项:
$validityperiod
,但对于注册和有效期,它也会返回布尔值。
date_create()
,结果与上面相同,都返回布尔值。
创建一个date_create_from_format()
对象并使用new DateTime()
将其转换为DateTime对象,但它仅在到期日期而不是注册日期起作用,这是我能得到的最接近的至少可以将到期日期转换为DateTime对象。
createFromFormat()
每次从字符串到对象的转换返回布尔值时,都会返回以下错误:
警告:date_format()期望参数1为DateTimeInterface,给定布尔值
如果它可以将注册日期转换为DateTime对象,则它应该能够运行date_diff(),并且$ validityperiod应该存储两个日期之间的天数差异
答案 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";`
// ----------- ^^
,您将获得正确创建的日期。