我通过提供属性
更改了dijit/form/DateTextBox
的datePattern
<form dojoType="dijit.form.Form" data-dojo-id="calc_form" id="calc_form">
<input type="text" data-dojo-type="dijit/form/DateTextBox" data-dojo-id="CONTRACT_DATE"
id="CONTRACT_DATE" name="CONTRACT_DATE"
constraints="{datePattern:'MM-dd-yyyy', strict:true}" />
</form>
,即属性为constraints="{datePattern:'MM-dd-yyyy', strict:true}"
,我在页面中正确显示了日期模式'01-28-2016'
。
但是当我尝试使用dijit/form/DateTextBox
获取包含dojo.formToJson("formID")
的表单的JSON时,我得到的值与指定的模式不同:'2016-01-28'
为什么呢?对此有什么解决方案吗?
答案 0 :(得分:0)
datePattern的唯一目的是格式化用户在DateTextBox中键入日期的方式。
无论用户键入日期的格式如何,内部Dojo都可以在ISO date format 按设计工作。这也使您,程序员更容易。
如果您正在考虑将ISO转换为另一种专有格式,那么就有一个模块。
require(['dojo/date/locale'], function(locale) {
var date = locale.parse('2016-01-28', {
datePattern: 'yyyy-MM-dd',
selector: 'date'
});
var formattedDate = locale.format(date, {
datePattern: 'MM-dd-yyyy',
selector: 'date'
});
console.log(formattedDate);
});
答案 1 :(得分:0)
问题在dojo.formToJson
中,它返回默认日期格式
无论你在dijit/form/DateTextBox
输入中指定格式。
所以,我建议在生成的jsonForm中格式化日期,
这是一个解决方案:
首先导入所需的js,
//AMD loading
require(["dojo/date/locale","dojo/json"],
function(locale,JSON){
......
})
"dojo/date/locale"
用于更改日期模式
"dojo/json"
用于解析o json对象或反向(Object to String)
然后声明formatJsonFormDates
函数
(params在代码中解释它返回一个带有格式化日期的新jsonForm)
如果表单中有很多日期,可以帮助您转换所有日期 在Array参数
中传递输入日期的name
属性
//helper function
/**
* The function get generated 'form' from dojo.formToJson(HTML from),
* and replaces all string Date to the desired format
* ("YYYY-MM-dd" to "MM-dd-YYYY" by exemple)
*
* @param string jsonForm Value of generated jsonForm(HTML from)
* @param Object form Value of the Dijit.form.Form
* @param Array dateFieldsNames string array Values of date form fields to be formatted
* @param string datepattern Values of the wanted Dateformat // "mm-dd-YYYY"
*
* @return string jsonFormObject Value of new Returned jsonForm with desired date format
*/
var formatJsonFormDates = function(jsonForm,form,dateFieldsNames,datepattern){
//if no field passed to the function return default
if(!fieldsNames.length && fieldsNames.length < 1 ) return jsonForm;
jsonFormObject = JSON.parse(jsonForm);
for(var i = 0; i<fieldsNames.length ;i++){
//check if field is an instance of Date
if(form.getValues()[fieldsNames[i]] instanceof Date) {
newDate = locale.format(form.getValues()[fieldsNames[i]],{datePattern: datepattern, selector: "date"});
jsonFormObject[fieldsNames[i]] = newDate;
}
}
return JSON.stringify(jsonFormObject);
}
finnaly,在获得你的jsonForm之后应用它的函数:
var formData = dojo.formToJson("yourFormID");
//I recomoand to use dijit/registry instead of dijit
formData = formatJsonFormDates(formData,dijit.byId("yourFormID"),["CONTRACT_DATE"],"MM-dd-yyyy");