2016-01-18 2 views
1

У меня есть форма, где пользователь может выбрать дату и время начала и окончания, после того, как из представлен я хочу создать createDateTime и использовать переданные аргументы. Поэтому я пробовал этот путь, но у меня есть только дата, хранящаяся в моей БД. Вот мой код:Как создать DateTime из прошедших аргументов даты и времени?

<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 in? На что они похожи? –

+0

DateFrom 14.01.2012, 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

Смежные вопросы