我正在调用一个 ajax 来获取一些用于编辑数据的值。 作为我的对象的一部分,我正在发送日期字段。 我的问题是,当我在 Controller 中收到日期值时,日期格式错误 - 我的日期和月份颠倒了。因此,我无法在需要的地方比较它们。 但是我的月份和日期是相反的。例如,它返回 3 月 10 日,而不是 10 月 3 日。 如何解决这个问题? 我在这样的对象中从 js 发送日期字段:
ExamsDataU = {
classId: classIdValue,
date: dateValue
};
在我的 Controller 中我尝试了:
DateTime dateToCheck = Convert.ToDateTime(dto.Date);
最佳答案
您应该知道的第一件事是使用 Convert.ToDateTime()
进行日期解析取决于服务器中使用的当前文化(您可以使用 CultureInfo.CurrentCulture
属性进行检查).您可以尝试其中一种方法在 Controller 操作方法中正确解析 JS 日期格式:
1) 使用自定义格式的 DateTime.ParseExact()
/DateTime.TryParseExact()
这种方式需要在解析日期之前指定日期格式:
// specify custom format
string dateFormat = "dd-MM-yyyy";
DateTime dateToCheck = DateTime.ParseExact(dto.Date, dateFormat, CultureInfo.InvariantCulture);
2) 以 ISO 8601 格式使用 DateTime.ParseExact()
/DateTime.TryParseExact()
使用date: dateValue.toISOString();
将JS日期转成ISO 8601格式再转换:
// specify ISO format
string dateFormat = "yyyy-MM-ddTHH:mm:ss.fffZ";
DateTime dateToCheck = DateTime.ParseExact(dto.Date, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
这种方式比前者更好,因为不需要在客户端编写额外的日期表示代码,并且如果需要,您还可以将日期表示调整为本地时间。
注意事项:
a) 对于指定的文化,您可以尝试CultureInfo.GetCultureInfo()
:
var culture = CultureInfo.GetCultureInfo(CultureInfo.CurrentCulture.Name);
DateTime dateToCheck = DateTime.ParseExact(dto.Date, dateFormat, culture);
b) 在使用DateTime.TryParseExact()
时,可以使用if
条件来检查日期字符串是否有效:
DateTime dateToCheck;
if (DateTime.TryParseExact(dto.Date, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateToCheck))
{
// do something
}
关于javascript - 如何以正确的格式从js获取日期?月和日颠倒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52619150/