2016-01-18 152 views
1

我有表格,用户可以选择开始/结束日期和时间,提交后我想创建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格式正确或在我的代码中有其他错误吗?

+0

TimeFrom/To和DateFrom/To的格式是什么?他们看起来怎么样? –

+0

DateFrom 01/14/2016,DateTo 01/15/2016,TimeFrom \t 7:00 AM,TimeTo \t 12:00 PM –

+2

cf_sql_date会将该值转换为日期,尝试将cfsqltype更改为cf_sql_timestamp –

回答

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,看看有没有可以使用的功能。

+0

是的,总是验证日期或时间*字符串*首先。 CF非常宽松,所以如果你只是接受“原样”输入,在数据库中出现一些古怪的日期时间条目只是个时间问题... – Leigh