我正在调用ajax以获取一些用于编辑数据的值。 作为对象的一部分,我正在发送日期字段。 我的问题是,当我在控制器中收到日期值时,日期格式错误-我的日期和月份被颠倒了。因此,我无法在需要的地方比较它们。 但是我的日子和日子倒转了。例如,它将返回3月10日,而不是10月3日。 如何解决这个问题? 我正在从js这样的对象中发送日期字段:
ExamsDataU = {
classId: classIdValue,
date: dateValue
};
在我的控制器中,我尝试了:
DateTime dateToCheck = Convert.ToDateTime(dto.Date);
答案 0 :(得分:1)
尝试一下
var date = new Date('2014-01-06');
var newDate = date.toString('dd-MM-yy');
或
var dateAr = '2014-01-06'.split('-');
var newDate = dateAr[1] + '-' + dateAr[2] + '-' + dateAr[0].slice(-2);
console.log(newDate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:1)
您应该知道的第一件事是,使用Convert.ToDateTime()
进行日期解析取决于服务器中使用的当前区域性(您可以使用CultureInfo.CurrentCulture
属性对其进行检查)。您可以尝试使用以下方法之一在控制器操作方法中正确解析JS日期格式:
1)使用自定义格式的DateTime.ParseExact()
/ DateTime.TryParseExact()
通过这种方式,必须在解析日期之前指定日期格式:
// specify custom format
string dateFormat = "dd-MM-yyyy";
DateTime dateToCheck = DateTime.ParseExact(dto.Date, dateFormat, CultureInfo.InvariantCulture);
2)使用DateTime.ParseExact()
/ DateTime.TryParseExact()
和ISO 8601格式
使用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)您可以使用if
条件来检查使用DateTime.TryParseExact()
时日期字符串是否有效:
DateTime dateToCheck;
if (DateTime.TryParseExact(dto.Date, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateToCheck))
{
// do something
}