2013-05-20 3 views
0

У меня есть страница cfm с текстовым полем, содержащим дату. Дата по умолчанию - , и я могу ее отредактировать. На той же странице у меня есть «combobox», который обновляет страницу, когда я меняю выбор. Проблема в том, что я пишу внутри текстового поля, например, "01/05/2013" после обновления будет "05/01/2013", а после другого обновления будет "01/05/2013". Вот некоторые код:ColdFusion - DateFormat инвертирует дату на странице обновления

<cfset myDate=""> 
<cfif isDefined('URL.date') and URL.date neq ""> 
<cfset myDate="#DateFormat(URL.date, 'dd/MM/yyyy')#"> 
<cfelse> 
<cfset myDate="#DateFormat(Now(), 'dd/MM/yyyy')#"> 
</cfif> 
<cfoutput> 
<cfinput type="text" name="date" id="date" style="width:65px; text-align:center" class="input" value="#myDate#"> 
</cfoutput> 

EDIT: на Javascript я использую, чтобы сохранить дату следующий код:

var date=document.getElementById("date"); 

и я обновить страницу с:

location.href("myPage.cfm?date="+date.value); 

любая помощь ? Благодарю.

+0

Вы "освежаете" или "повторно отправляете"? – Travis

+0

Я использую location.href, поэтому перезаряжаю страницу – gabboSonc

ответ

4

Как полагает Тревис, по умолчанию ColdFusion рассматривает даты в формате США mm/dd/yyyy. Итак, ваш пример из 01/05/2013 переводится на 5 января 2013 года. Затем вы переформатируете эту дату в формате dd/mm/yyyy как 05/01/2013. Затем ваш JavaScript присваивает эту новую дату в поле формы. При повторной отправке дате сейчас 05/01/2013, которая в формате США составляет 1 мая 2013 года. Затем вы переформатируете обратно до 01/05/2013, а JavaScript обновит поле формы и так далее.

Поскольку вы хотите иметь дело с форматом даты, отличным от U.S, вы должны использовать функцию Locale Specific LSDateFormat() вместо DateFormat(). С его помощью вы можете указать формат и язык для использования.

lsDateFormat(myDate, "dd/mm/yyyy", "en_GB") 
+0

Лол, сказал я в июне. # 1, вы не должны программировать мигрень. – Travis

+2

Это должно быть одно из наиболее часто неправильно понятых поведений в CF ;-) http://stackoverflow.com/questions/16557244/coldfusion-10-dateformat-issue/16569306#16569306 http://stackoverflow.com/questions/15929492/date-strings-not-working-in-date-range-select-statement/15932634 # 15932634 и т. д. – Leigh

+0

Да, похоже, у нас есть довольно много таких вопросов. –

0

url.date не является объектом даты, это строка. Поэтому эта линия:

<cfset myDate="#DateFormat(URL.date, 'dd/MM/yyyy')#"> 

перегружен. Все что вам нужно:

<cfset myDate = URL.date> 

Это простое изменение должно решить вашу проблему.

+0

nope ... такой же проблема. – gabboSonc

+1

@gabboSonc вы можете включить полный экземпляр для воспроизведения? –

2

Я считаю, что это потому, что CF хочет использовать формат месяца/дня/года по умолчанию. Когда вы набираете 1/5/13 CF, вы думаете, что вы имеете в виду 5 января 2013 года, поэтому, когда вы используете dateformat для форматирования его в день/месяц/год, вы получаете 5/1/2013, когда страница перезагружается с 5/1/2013 , CF теперь думает, что вы имеете в виду 1 мая 2013 года. Каждый раз, когда вы перезагружаете страницу, она меняет ее туда и обратно.

Если вы не хотите, чтобы ColdFusion возился с введенной вами датой, не применяйте dateFormat. Документы Adobe для dateFormat предлагают даты форматирования ввода - плохая идея.

Примечание: Функция DateFormat лучше всего использовать для форматирования вывода, а не для форматирования ввода. Для ввода форматирования используйте одну из функций даты/времени (например, CreateDate).

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