【问题标题】:Javascript adding days to a DateJavascript将日期添加到日期
【发布时间】:2023-03-08 22:54:01
【问题描述】:

您好,我正在尝试创建一个变量,即今天的当前日期。我正在尝试为其添加 106 天,它成功运行。然后我尝试创建第二个变量 today2 并从“今天”变量(当前日期 + 106 -31)中减去 31 天。这部分不起作用。这就是它给我的...

2013 年 3 月 28 日星期四 11:52:21 EDT
2012 年 11 月 27 日星期二 11:52:21 EST

第二行不是第一行之前的 31 天。有人可以帮我纠正这个吗?

随意玩我的 jsfiddle http://jsfiddle.net/fjhxW/

<div id="current"></div>
<div id="current2"></div>
<div id="current3"></div>

var today = new Date();
var today2 = new Date();

today.setDate(today.getDate() + 106);

today2.setDate(today.getDate() - 31);  

var dd = today.getDate();
var mm = today.getMonth(); //January is 0!
var yy = today.getFullYear();

document.getElementById('current').innerHTML = today;
document.getElementById('current2').innerHTML = today2;

【问题讨论】:

    标签: javascript html date


    【解决方案1】:

    您不能将负数传递给setDatesetDate 用于设置日期以设置绝对天,而不是相对天。

    来自the docs

    如果您指定的参数超出预期范围,setDate 会尝试相应地更新 Date 对象中的日期信息。例如,如果您对 dayValue 使用 0,则日期将设置为上个月的最后一天。

    【讨论】:

    • @Neal:这就是他正在做的事情。问题是当值是负数时。
    • @StackOverFlow:没有人建议使用 jQuery。
    【解决方案2】:

    现在是圣诞节时间,所以我给出的答案只是复制/粘贴:

    var oneDay = 24 * 60 * 60 * 1000, // 24h
        today = new Date().getTime(), // in ms
        firstDate,
        secondDate;
    
    firstDate = new Date(today + 106 * oneDay);
    secondDate = new Date(firstDate.getTime() - 31 * oneDay);
    

    【讨论】:

    • 当心夏令时更改日。一个有 23 小时,另一个有 25 小时。那几天你可能会得到奇怪的结果。
    • 是的。如果您想操纵日期,请使用时间戳! :-)
    【解决方案3】:

    试试datejs:

    Date.parse('t - 31 d'); // today - 31 days
    Date.today().add(106).days().add(-31).days();
    

    【讨论】:

    • 领先我几分钟 ;) - 我喜欢这个库,因为我不想担心日期算术。它支持闰年、夏令时、时区等,因此您可以非常轻松地addDaysaddMonthsaddYears(或减去它们)。
    • 但是添加插件只是为了使用一次不是一个好主意。
    • @Eru,是的,但我通常会发现,如果我在代码的一部分中操作日期,我需要在其他地方进行操作......这取决于你 30KB 的文件是否值得不是。
    • 对,但我真的不知道这个功能会被使用多少次。我的只是一个选项或建议,你可以接受也可以不接受。
    • @mccannf 同意,我查看了 date.js 的代码库,我不得不说它是 idiotproof。所以这是一个很好的插件,但如果你知道你在做什么,真的需要它吗?
    【解决方案4】:

    数学解法:

    在当前日期 (106 - 31) 上加上 75 天,然后在该日期上加上 31 天。更改代码中显示两个日期的顺序。

    既然你总是可以前进,为什么还要前进和后退?

    【讨论】:

    • 问题是,setDate 用于获取从 1 到 31 的日期。这不是为了增加天数。
    • 但它会正确处理超出预期范围的值,因此您实际上可以使用它来添加天数。
    • 我不确定该行为是否已定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多