减去日期时间值

时间:2014-01-21 16:57:49

标签: javascript asp.net-mvc-4 datetime viewmodel

调用以下代码时,我有一个保存在ViewModel变量 @ Model.Course.UploadDate 中的课程的上传日期:

alert('@Model.Course.UploadDate');

我得到了预期的输出:

21/01/2014 16:16:13

我知道想要在向数据库发送语句之前检查uploadDate是否在最后10秒内,但是尝试使用以下代码:

var uploadDate = new Date('@Model.Course.UploadDate.ToLongDateString()');
alert("UPLOAD DATE " + uploadDate);

我收到了意外的输出:

Tue Jan 21 2013 00:00:00 GMT+0000

这是我需要日期的格式,只显示保存的时间数据。我接着想要进行如下计算:

var TENSECONDS = 10 * 1000;
var uploadDate = new Date('@Model.Course.UploadDate.ToLongDateString()');
var today = new Date();
var check = today - uploadDate;

if (parseInt(check) > parseInt(TENSECONDS))
        alert("ROUTE1");
    else
        alert("ROUTE2");

2 个答案:

答案 0 :(得分:2)

引用来自Date对象构造函数的documentation

  

value:整数值,表示自1以来的毫秒数   1970年1月00:00:00 UTC(Unix Epoch)。

实际上,传递给Date对象的构造函数而不是一些可能被错误解释并完全取决于文化的字符串是最安全的事情。

因此,只需将DateTime实例转换为自1970年1月1日以来经过的毫秒数,并将此时间戳提供给构造函数:

var timestamp = @(Model.Course.UploadDate - new DateTime(1970, 1, 1)).TotalSeconds;
var uploadDate = new Date(timestamp);

如果您打算传递字符串,可以使用ISO8601格式:

  

dateString:表示日期的字符串值。字符串应该在   Date.parse()方法识别的格式(符合IETF的RFC   2822个时间戳和ISO8601的版本。

所以:

var uploadDate = new Date('@Model.Course.UploadDate.ToString("o")');

答案 1 :(得分:0)

我使用以下代码解决了这个问题:

var dateArray = new Array();
dateArray = '@Model.Course.UploadDate'.split("/");
var dateD = dateArray[0];
var dateM = dateArray[1];
var dateY = dateArray[2];
var dateT = dateArray[3];
timeArray = dateT.split(":");
var timeH = timeArray[0];
var timeM = timeArray[1];
var timeS = timeArray[2];
var dateUS = dateM + "/" + dateD + "/" + dateY + dateT;
var uploadDate = new Date(dateD,dateM,dateY,timeH,timeM,timeS);