为什么日期如此皇家PITA:
我有一个带有日期选择器的ExtJS(版本6.2.0)表单面板:
filepath = "somefile"
line_offsets = []
with open(filepath, "r") as file:
while True:
posn = file.tell()
line = file.readline()
if not line: # end-of-file?
break
line_offsets.append(posn) # Remember where line started.
""" Process line """
我通过Ext.request.Ajax调用在我的控制器中提交:
{
allowBlank:false,
fieldLabel: 'Consent Date',
name: 'consent_date',
emptyText: 'consent_date',
//inputType: 'date',
xtype: 'datefield',
//maxValue: new Date(),
format: 'm/d/Y',
submitFormat: 'm/d/Y'
}
问题是,无论表单面板中的submitFormat如何,它总是呈现提交的consent_date格式为:onNewPatientFormSubmit: function () {
var formPanel = this.lookupReference('newPatientForm'),
form = formPanel.getForm(),
url = 'http://127.0.0.1:5000/mrnconsentview/api/create';
if (form.isValid()) {
values = form.getFieldValues(true);
console.log('form');
console.log(form);
console.log(values);
form.reset();
Ext.MessageBox.alert(
'Thank you!',
'Your inquiry has been sent. We will respond as soon as possible.'
);
Ext.Ajax.request({
method: 'POST',
cors: true,
timeout: 6000000, //default is 30 seconds
useDefaultXhrHeader: false,
url: url,
params: values,
headers: {
'Accept': 'application/json'
},
disableCaching: false,
success: function (response) {
json = Ext.decode(response.responseText);
console.log('json');
console.log(json);
console.log(response);
if (response.status === 200) {
console.log(json.items);
}
else {
Ext.MessageBox.alert('Error', response.message);
}
}
});
}
}
,因此,我的Ajax表单提交中的JSON如下所示:
Fri Jan 02 1995 00:00:00 GMT-0600 (CST)
在服务器上更糟糕(Flask,带有wtforms),它看起来像:{mrn: "testing12345", consent_date: Mon Jan 02 1995 00:00:00 GMT-0600 (CST)}
因此,因为它没有将它看作日期时间对象而产生扼流......来自服务器的响应是< / p>
1995-01-02T00:00:00
我可以对它进行后期处理,但我更愿意这样做而不必这样做。 (我尝试使用python datetime方法进行最小的后期处理,但放弃了...... ala:{
"error_details": {
"consent_date": [
"Not a valid datetime value"
]
},
"message": "Validation error"
}
并收到错误:t = datetime.datetime.strptime(dict(request.form)['consent_date'][0], "%Y-%m-%dT%H:%M:%S.%f")
)
答案 0 :(得分:2)
您应该使用getValues表单方法。 getFieldValues
不会将submitFormat
帐户纳入帐户。
getFieldValues :..这类似于getValues,除了这个方法 收集特定于类型的数据值(例如,日期字段的日期对象) 而getValues只返回提交的字符串值。
getValues :..这类似于getFieldValues,只是此方法仅收集提交的字符串值,而 getFieldValues收集特定于类型的数据值(例如Date对象) 对于日期字段。)