45

我在 Javascript 中有一个从 MVC 接收 C# DateTime 的函数。如果日期为空,它应该返回“-”,如果它是一个有效的日期,它应该返回格式化的日期。

重要提示:无法从 C# 以其他格式发送日期。

Javascript:

function CheckDate(date) {

  if (date == "Mon Jan 01 0001 00:00:00 GMT+0000 (GMT Daylight Time)")
    return "-";
  else {
    var dat = new Date(date);
    return dat.getFullYear() + dat.getMonth() + dat.getDay();
  }

有没有更好的方法来比较日期是否是 C# New DateTime?

以及如何以“yyyy/MM/dd”格式解析和返回日期?

4

2 回答 2

57

鉴于您坚持使用的输出,我想不出任何更好的方法来DateTime在 javascript 端捕获 0 。

Date.parse应该可以满足您的解析需求,但它返回毫秒数,因此您需要在它周围包装一个 Date 构造函数:

var date = new Date(Date.parse(myCSharpString));

对于退货日期,您只需要

date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getDate() + 1);

date.getMonth并且date.getDate是 0 索引而不是 1 索引。)

小提琴:http: //jsfiddle.net/GyC3t/

编辑 感谢 JoeB 的发现,让我更正一下。该date.getMonth()函数是 0-indexed,但该date.getDate()函数是 1-indexed。小提琴正在使用 +1“工作”,因为 date.getMonth 在当地时间工作,即在 UTC 之前。我没有正确检查文档,只是添加了 1,它与小提琴一起使用。

更合适的方法是:

对于退货日期,您只需要

date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + (date.getUTCDate());

date.getMonth索引为 0,索引date.getDate为 1,但容易受到时区差异的影响。)

小提琴:http: //jsfiddle.net/GyC3t/25/

于 2013-07-30T14:46:04.160 回答
3

我使用以下内容将 Javascript 日期传递给 C#:

var now = new Date();
var date = (now.getTime() / 86400000) - (now.getTimezoneOffset() / 1440) + 25569;

所以如果你从 C# 中得到毫秒数,它应该是这样的:

var csharpmilliseconds;
var now = new Date();
var date = new Date((csharpmilliseconds + (now.getTimezoneOffset() / 1440) - 25569) * 86400000);
于 2013-07-30T14:55:20.620 回答