Javascript 无法添加两个日期值

Javascript 无法添加两个日期值,javascript,angularjs,date,Javascript,Angularjs,Date,我实现了一个放大曲线函数,需要在其中添加两个时间值。但当我这样做时,它会将其视为一个字符串,并将其连接起来。尽管当我对这两个值执行减法运算时,它给出了正确的结果。如何在添加两个日期值时获得正确的结果 function magnifyChart (timeA, timeB) { var newTimeA; var newTimeB; var quarterSize = Math.floor((timeB - timeA) / 4); logger.info("tim

我实现了一个放大曲线函数,需要在其中添加两个时间值。但当我这样做时,它会将其视为一个字符串,并将其连接起来。尽管当我对这两个值执行减法运算时,它给出了正确的结果。如何在添加两个日期值时获得正确的结果

function magnifyChart (timeA, timeB) {
    var newTimeA;
    var newTimeB;
    var quarterSize = Math.floor((timeB - timeA) / 4);
    logger.info("timeA", timeA); //Fri Sep 08 2017 17:45:19 GMT-0400 (EDT)
    logger.info("timeB", timeB); //Sun Oct 01 2017 16:01:51 GMT-0400 (EDT)
    logger.info("quarterSize", quarterSize); //495248155
    newTimeA = Math.floor(parseInt(timeA) + parseInt(quarterSize));
    newTimeB = Math.floor(timeB - quarterSize);
    logger.info("newTimeA", newTimeA); 
    logger.info("newTimeB", newTimeB);//1506392863689
    return [timeA + quarterSize, timeB - quarterSize];
}

您可以使用
date.getTime()
将日期转换为整数(时间戳)。完成数学运算后,您可以通过执行
新建日期(整数)

将其转换回日期。如果timeA和timeB是日期对象,则在:

newTimeA = Math.floor(parseInt(timeA) + parseInt(quarterSize));
表达式
parseInt(timeA)
将首先强制timeA为string,然后尝试将其解析为number,这可能会返回一个number或NaN

要解决此问题,最简单的方法是使用:

不需要Math.floor,因为这两个值都已经是整数,将它们相加必须生成另一个整数

表达式
+timeA
将返回其时间值,该时间值被指定为整数(或NaN,但Math.floor不会修复该值),并且quarterSize必须是Math.floor中的整数:

当您减去两个日期时,
-
操作符强制这两个日期都是第一个数字,因此
timeB-timeA
在没有任何特殊处理的情况下“起作用”

您生成了newTimeA和newTimeB,但没有将它们用于任何用途,因此我认为它们仅用于调试

因此,您的代码简化为:

function magnifyChart (timeA, timeB) {
    var quarterSize = Math.floor((timeB - timeA) / 4);
    return [+timeA + quarterSize, +timeB - quarterSize];
}
如果要返回日期而不是时间值,请执行以下操作:

    return [new Date(+timeA + quarterSize),
            new Date(+timeB - quarterSize)];
NB
+timeB-quartize
的情况下,不需要一元
+
,因为减法会强制日期为一个数字,但是保持代码一致可能对维护有用。

在这个问题中没有AngularJs,这是javascript日期问题。我刚刚添加了一个函数,其中我面临一个问题。我的整个项目都是在angular js中完成的,所以如果angular date filter可以解决这个问题,那么它就可以完成了。是的,它在完成date.getTime()并将其转换回日期字符串时非常有效。谢谢:)嘿,谢谢!我不知道+timeA返回它的时间值。我得学点新东西。而且效果很好:)
function magnifyChart (timeA, timeB) {
    var quarterSize = Math.floor((timeB - timeA) / 4);
    return [+timeA + quarterSize, +timeB - quarterSize];
}
    return [new Date(+timeA + quarterSize),
            new Date(+timeB - quarterSize)];