我有一个表单,用户可以在其中选择开始/结束日期和时间,在提交之后我想创建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是否格式正确或我的代码中出现了其他错误?
答案 0 :(得分:4)
这是你的问题:
<cfset StartDateTime = createDateTime(year(arguments.DateFrom)
, month(arguments.DateFrom)
, day(arguments.DateFrom)
, hour(arguments.TimeFrom)
, minute(arguments.TimeFrom), 0)>
日期部分很好,因为您的日期参数是日期。时间部分不是因为你的时间参数是字符串。您必须处理该字符串以获得小时和分钟。
在评论中,您说您的时间字符串类似于7 AM
。您必须处理此操作才能获得正确的小时数和分钟数。你需要考虑的事情是:
说了这么多,你可能不是第一个遇到这个问题的人。查看cflib.org以查看是否有可以使用的功能。