9

我正在尝试使用此函数在 JS 中计算剩余时间(例如:从今天(2014 年 3 月 2 日)起的 10 年、2 个月和 10 天:

var d2 = new Date(2024, 3, 12);
var d1 = new Date();
var d0 = new Date(1970, 0, 1);

var diff = new Date(d2.getTime() - (d1.getTime() + d0.getTime() ) );
var years = diff.getFullYear();
var months = diff.getMonth();
var days = diff.getDay();

alert("remaining time = " + years + " years, " + months + " months, " + days + " days.");

但是我没有得到 10 年的差异,而是得到了 1980 年的差异(尽管我理解的天数差异是购买月份和年份的天数变化):

在此处输入图像描述

是否可以使用此策略执行此“剩余时间”操作?如果是这样,如何获得预期的结果?

这里是 JS shell 中的函数:jsfiddle.net/3ra6c/

4

3 回答 3

5

我在这里找到了我正在寻找的解决方案:

var date1 = new Date();
var date2 = new Date(2015, 2, 2);
var diff = new Date(date2.getTime() - date1.getTime());

var years = diff.getUTCFullYear() - 1970; // Gives difference as year
var months = diff.getUTCMonth(); // Gives month count of difference
var days = diff.getUTCDate()-1; // Gives day count of difference

alert("remaining time = " + years + " years, " + months + " months, " + days + " days.");

它似乎工作得很好!

于 2014-03-02T21:32:59.013 回答
4

正如我所解释的,Date没有配备这样的功能,你必须自己做数学。你可以得到两个日期之间的毫秒差,但接下来就是做数学来表示你想要的。

使用moment.js, 加载require.js, 人性化近似的示例。

Javascript

require.config({
    paths: {
        moment: 'http://momentjs.com/downloads/moment.min'
    }
});

require(['moment'], function (moment) {
    var x = moment(new Date(2024, 3, 12)).from(new Date());

    console.log(x);
});

输出

in 10 years

jsFiddle 上

查看他们的文档以了解如何使输出人性化,您可能需要更多细节。

于 2014-03-02T18:04:49.167 回答
1

var diff = new Date(d2.getTime() - (d1.getTime() + d0.getTime() ) )

为什么要加d0?尝试删除它。

于 2014-03-02T17:39:18.853 回答