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>
Это простое изменение должно решить вашу проблему.