【发布时间】:2020-03-17 08:43:33
【问题描述】:
我想检查日期是否可以解析。但是当我尝试使用以下逻辑时,它会落在有效日期(例如:3/10/2020)。 我正在通过 ajax 请求接收这个 myDate。
我尝试过改变文化,但还是没用
DateTime validMyDate;
if(DateTime.TryParse(myDate, CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out validMyDate)){}
感谢您的帮助
已编辑:请在此处找到 ajax 代码
//fileds
<input name="StartDate" id="StartDate" type="hidden" value="3/10/2020 12:00:00 AM" data-val="true">
<input name="EndDate" id="EndDate" type="hidden" value="3/26/2020 12:00:00 AM" data-val="true">
// ajax call
$.get(domainUrl + "Controller/Action",
{
strartDate: dateFormatter.fomat($('#StartDate').val(), "mm/dd/yyyy"),
endDate: dateFormatter.fomat($('#EndDate').val(), "mm/dd/yyyy");
},
function (result) {
}).fail(function (error) {
});
// date formatter
var dateFormatter = {
fomat: function (date, format) {
var year = date.getFullYear();
var month = date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth();
var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
var newDate;
switch (format) {
case "dd/mm/yyyy": newDate = day + "/" + month + "/" + year;
break;
default: newDate = year + "-" + month + "-" + day;
}
return newDate;
}
}
请注意:这个格式化功能是添加的,因为.val()在乞讨时不起作用,所以我再次格式化它以检查它是否有效。
【问题讨论】:
-
"我正在通过 ajax 请求接收这个 myDate" - 你能更改你的 AJAX 代码吗?我强烈建议您确保以 ISO-8601 格式 (yyyy-MM-dd) 传输日期。
-
但我怀疑这失败的至少部分原因是您的字符串包含 U+200E 五次。这是从左到右的标记字符,实际上不应该出现在字符串中的任何位置。
-
这不是语言环境问题(尽管使用 MM/dd/yyyy 作为 IMO 数据格式不是一个好主意)。这是您的数据中存在额外不可见字符的问题。
-
需要修复的代码是Javascript代码。为什么一开始就有看不见的字符?为什么要自己格式化日期,为什么不至少使用
Date.toISOString()? -
我不是 javascript 程序员,但我一点也不喜欢你的 javascript。如果
month小于 10 则为字符串,如果大于则为整数。day也是如此。这让我的老程序员皮肤毛骨悚然。