我有以下代码,现在计算正确的分钟数,但天数没有正确计算。此外,所需的帮助添加了仅计算mon-fri并排除sat / sun的代码。
日期格式我使用减法(DDMMYYY):01/01/2015 20:21 - 01/01/2015 20:22。这将使用以下代码返回4.1。 “。1”是正确的,一分钟差异。 4是不正确的,因为它不超过一天。
注意 - 我搜索了其他线程但无法找到解决方案。 我的代码如下:
function stringToDate(s) {
var dateParts = s.split(' ')[0].split('/');
var timeParts = s.split(' ')[1].split(':');
var d = new Date(dateParts[0], --dateParts[1], dateParts[2]);
d.setHours(timeParts[0], timeParts[1]);
return d;
}
function test() {
var a = slat_1.value;
var b = slar_1.value;
var x = (new Date(stringToDate(a) - stringToDate(b)));
//converting milliseconds
x = 1000*Math.round(x/1000); // round to nearest second
var d = new Date(x);
alert( d.getUTCDay() + '.' + d.getUTCMinutes() );
}
答案 0 :(得分:2)
如果您输入格式" 01/01/2015 20:21"
,那么您对日期的订单是错误的var d = new Date(dateParts[0], --dateParts[1], dateParts[2]);
应为Year, Month, Date
var d = new Date(dateParts[2], --dateParts[0], dateParts[1]);
下一步
var x = (new Date(stringToDate(a) - stringToDate(b)));
你正在减去两个字符串的新日期......没有任何意义。
用基本数学计算差异
function stringToDate(s) {
var dateParts = s.split(' ')[0].split('/');
var timeParts = s.split(' ')[1].split(':');
var d = new Date(dateParts[2], --dateParts[0], dateParts[1]);
d.setHours(timeParts[0], timeParts[1]);
console.log(d)
return d;
}
(function test() {
var a = "01/02/2015 20:21";
var b = "01/02/2015 20:22";
var delta = (stringToDate(b) - stringToDate(a))/1000;
var days = Math.floor(delta / 86400);
delta -= days * 86400;
console.log(delta);
var minutes = Math.floor(delta / 60) % 60;
alert(days + "." + minutes)
}());

答案 1 :(得分:1)
所有问题的答案(至少在这种情况下)是使用momentjs及其日期计算功能。
答案 2 :(得分:-1)
使用Moment JS可以让您的生活更轻松。在代码中使用日期,时间和年份很难进行数学计算。有些月份比其他月份有更多的日子。 (你好闰年)
我创建了一个按时工作的解决方案,我注意到了几个问题。
你不能以你的方式减去完整日期,因为当你从一个飞蛾移动到另一个飞蛾时,你将从较大的一个中减去一个较小的数字。所以你最终得到一个负数。同样的事情发生在今年年底。
你可能想要控制一些变量的日志,以确保你得到你期望的结果。
这只是基于我所看到的。