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

时间:2016-01-18 14:20:26

标签: datetime coldfusion coldfusion-9

我有一个表单,用户可以在其中选择开始/结束日期和时间,在提交之后我想创建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不会一起创建日期和时间。以下是我的值在DB中的存储方式: 开始:2016-01-20 00:00:00.000 端:2016-01-21 00:00:00.000 我的createDateTime是否格式正确或我的代码中出现了其他错误?

1 个答案:

答案 0 :(得分:4)

这是你的问题:

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

日期部分很好,因为您的日期参数是日期。时间部分不是因为你的时间参数是字符串。您必须处理该字符串以获得小时和分钟。

在评论中,您说您的时间字符串类似于7 AM。您必须处理此操作才能获得正确的小时数和分钟数。你需要考虑的事情是:

  • 最后两个字符是AM还是PM?
  • 小时数是1还是2位?
  • 如果它不是最重要的时间,那么会有多少分钟?

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