如何从传递的参数日期和时间创建日期时间?
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 看看是否有您可以使用的功能。
我有用户可以选择 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 看看是否有您可以使用的功能。