ColdFusion - DateFormat инвертирует дату на странице обновления

У меня есть страница cfm с текстовым полем внутри даты. Дата по умолчанию "Now()" и я могу редактировать это. На той же странице у меня есть "комбинированный список", который обновляет страницу, когда я меняю выбор. Проблема в том, что если я напишу внутри текстового поля, например, "01/05/2013" после обновления будет "05/01/2013" и после очередного обновления будет "01/05/2013", Вот некоторый код:

<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>

РЕДАКТИРОВАТЬ: на Javascript я использую, чтобы сохранить дату следующий код:

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

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

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

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

3 ответа

Решение

Как заявил Трэвис, по умолчанию 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 обновляет ваше поле формы и так далее.

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

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

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

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

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

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

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

является сверхмощным. Все, что тебе нужно:

<cfset myDate = URL.date>

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

Другие вопросы по тегам