如何从js获取正确格式的日期?月和日倒转

时间:2018-10-03 03:06:50

标签: javascript c# jquery asp.net-mvc

我正在调用ajax以获取一些用于编辑数据的值。 作为对象的一部分,我正在发送日期字段。 我的问题是,当我在控制器中收到日期值时,日期格式错误-我的日期和月份被颠倒了。因此,我无法在需要的地方比较它们。 但是我的日子和日子倒转了。例如,它将返回3月10日,而不是10月3日。 如何解决这个问题? 我正在从js这样的对象中发送日期字段:

ExamsDataU = {
            classId: classIdValue,
            date: dateValue
        };

在我的控制器中,我尝试了:

DateTime dateToCheck = Convert.ToDateTime(dto.Date);

2 个答案:

答案 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
}