如何从传递的参数日期和时间创建日期时间?

How to createDateTime from passed arguments date and time?

我有用户可以选择 start/end 日期和时间的表单,提交 from 后我想创建 createDateTime 并使用传递的参数。所以我尝试了这种方式,但我的数据库中只存储了日期。这是我的代码:

<cfargument name="DateFrom" type="date" required="yes">
<cfargument name="DateTo" type="date" required="yes">
<cfargument name="TimeFrom" type="string" required="yes">
<cfargument name="TimeTo" type="string" required="yes">

<cfset StartDateTime = createDateTime(year(arguments.DateFrom), month(arguments.DateFrom), day(arguments.DateFrom), hour(arguments.TimeFrom), minute(arguments.TimeFrom), 0)>
<cfset EndDateTime = createDateTime(year(arguments.DateTo), month(arguments.DateTo), day(arguments.DateTo), hour(arguments.TimeTo), minute(arguments.TimeTo), 0)>

 <cfquery name="addReservation" datasource="test">
    Insert Into tableReserv(PickDateTime,DropDateTime)
    Select <cfqueryparam cfsqltype="cf_sql_date" maxlength="12" value="#StartDateTime#">,
            <cfqueryparam cfsqltype="cf_sql_date" maxlength="12" value="#EndDateTime#"> 
    Where Not Exists(Select UserID
                     From aviRequests
                     Where PickDateTime < <cfqueryparam cfsqltype="cf_sql_timestamp" value="#StartDateTime#">
                     And DropDateTime > <cfqueryparam cfsqltype="cf_sql_timestamp" value="#EndDateTime#">
                     )
    Select SCOPE_IDENTITY() As RecID;
</cfquery>

出于某种原因,我的 StartDateTime 和 EndDateTime 没有一起创建日期和时间。这是我的值在数据库中的存储方式: 开始:2016-01-20 00:00:00.000 结束:2016-01-21 00:00:00.000 我的 createDateTime 格式是否正确或我的代码中有其他问题?

这是你的问题:

<cfset StartDateTime = createDateTime(year(arguments.DateFrom)
, month(arguments.DateFrom)
, day(arguments.DateFrom)
, hour(arguments.TimeFrom)
, minute(arguments.TimeFrom), 0)>

日期部分没问题,因为您的日期参数是日期。时间部分不是因为您的时间参数是字符串。您必须处理该字符串才能获取小时和分钟。

在评论中,您说您的时间字符串类似于 7 AM。您必须对此进行处理以获得正确的小时数和分钟数。您必须考虑的事项是:

  • 最后两个字符是上午还是下午?
  • 小时数是 1 位数还是 2 位数?
  • 如果不是整点,分钟是怎么表示的?

说了这么多,你可能不是第一个遇到这个问题的人。查看cflib.org 看看是否有您可以使用的功能。