如何使用 JavaScript 添加/减去日期?

IT技术 javascript jquery date jquery-ui-datepicker
2021-02-11 14:44:27

我想让用户使用 JavaScript 轻松添加和减去日期,以便按日期浏览他们的条目。

日期格式为:“mm/dd/yyyy”。我希望他们能够点击“下一步”按钮,如果日期是:“06/01/2012”然后点击下一步,它应该变成:“06/02/2012”。如果他们点击“prev”按钮,那么它应该变成“05/31/2012”。

它需要跟踪闰年、一个月中的天数等。

有任何想法吗?

PS 使用 AJAX 从服务器获取日期不是一种选择,它有点滞后,而不是客户端想要的用户体验。

6个回答

代码:

var date = new Date('2011', '01', '02');
alert('the original date is ' + date);
var newdate = new Date(date);

newdate.setDate(newdate.getDate() - 7); // minus the date

var nd = new Date(newdate);
alert('the new date is ' + nd);

使用日期选择器:

$("#in").datepicker({
    minDate: 0,
    onSelect: function(dateText, inst) {
       var actualDate = new Date(dateText);
       var newDate = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()+1);
        $('#out').datepicker('option', 'minDate', newDate );
    }
});

$("#out").datepicker();​

JSFiddle 演示

可能会派上用场的额外东西:

getDate()   Returns the day of the month (from 1-31)
getDay()    Returns the day of the week (from 0-6)
getFullYear()   Returns the year (four digits)
getHours()  Returns the hour (from 0-23)
getMilliseconds()   Returns the milliseconds (from 0-999)
getMinutes()    Returns the minutes (from 0-59)
getMonth()  Returns the month (from 0-11)
getSeconds()    Returns the seconds (from 0-59)

好链接: MDN 日期

为什么要创建第三个新日期:var nd = new Date(newdate)?? 由 .setDate 调整的日期对象 newdate 很好,不是吗?
2021-03-31 14:44:27
@KevinM 是的,取决于目的,所以nd新日期var只是为了清楚起见!:)
2021-04-04 14:44:27

您需要使用getTime()setTime()在 javascript Date 对象中添加或减去时间。使用setDate()getDate()达到 1、30、31 等月份的限制时会导致错误。

使用 setTime 允许您以毫秒为单位设置偏移量,并让 Date 对象计算其余部分:

var now=new Date();
var yesterdayMs = now.getTime() - 1000*60*60*24*1; // Offset by one day;
now.setTime( yesterdayMs );
最佳解决方案!。使用 setDate 的所有其他解决方案都应该被否决......可能会给我带来很多麻烦......
2021-03-17 14:44:27
这是唯一对我有用的解决方案。当日索引使用负数时,Date 构造函数的行为似乎很奇怪。我发现解决它的唯一方法是直接使用毫秒
2021-03-20 14:44:27
同上。这是最干净、更可靠的解决方案。谢谢@decasteljau
2021-04-02 14:44:27
startdate.setDate(startdate.getDate() - daysToSubtract);


startdate.setDate(startdate.getDate() + daysToAdd);

JavaScriptDate对象可以在这里提供帮助。

第一步是将这些字符串转换为Date实例。这很容易做到:

var str = "06/07/2012"; // E.g., "mm/dd/yyyy";
var dt = new Date(parseInt(str.substring(6), 10),        // Year
                  parseInt(str.substring(0, 2), 10) - 1, // Month (0-11)
                  parseInt(str.substring(3, 5), 10));    // Day

然后你可以做各种有用的计算。JavaScript 日期理解闰年等。他们使用理想化的“日”概念,即恰好86,400 秒长。它们的基本值是自大纪元(1970 年 1 月 1 日午夜)以来的毫秒数;对于 The Epoch 之前的日期,它可以是负数。

更多关于MDN 页面的信息Date

您也可以考虑使用像MomentJS这样的库,它有助于解析、计算日期、格式化……

同意。如果您已经在使用 MomentJS,则无需跳槽,但我不会在新项目中采用它,除非有非常迫切的需求。
2021-03-13 14:44:27
不要和约会的人在一起。只需使用 moment.js 并保存您的头发。
2021-03-15 14:44:27
现在是 2020 年,MomentJS 开发人员现在认为它是一个遗留项目。
2021-03-28 14:44:27
@DiomidisSpinellis - 嘿,突发新闻!:-)(实际上是上个月。)但请注意,它不会去任何地方,他们只是没有添加任何新功能。他们还在维护它。多年来我一直没有觉得需要新功能,所以......无论如何,希望Temporal以良好的速度向前发展,但它的 API 仍然是一个(稍微)移动的目标......
2021-04-03 14:44:27
此外,不基于浏览器的 JavaScript(因为它嵌入在应用程序中)可能不会将该库列入白名单;在这些情况下,知道如何在没有图书馆的情况下获得答案至关重要。
2021-04-06 14:44:27
//In order to get yesterday's date in mm/dd/yyyy.


function gimmeYesterday(toAdd) {
            if (!toAdd || toAdd == '' || isNaN(toAdd)) return;
            var d = new Date();
            d.setDate(d.getDate() - parseInt(toAdd));
var yesterDAY = (d.getMonth() +1) + "/" + d.getDate() + "/" + d.getFullYear();
$("#endDate").html(yesterDAY);
        }
$(document).ready(function() {
gimmeYesterday(1);
});

你可以在这里试试:http : //jsfiddle.net/ZQAHE/