js获取指定日期的前一天

如何获取指定日期的前一天


const getYesterday = (date) => {
    const trueDate = date.getDate();    //获取输入日期的 日
    const trueMonth = date.getMonth()+1;    //获取输入日期的 月  ps:+1是因为月是从0开始的,所以真实的月份需要+1
    const trueYear = date.getFullYear();    //获取输入日期的 年
    var dateString ='';     //定义一个字符串,用户存放字符串形式的日期
    if(trueDate!==1){       //如果指定日期的‘日’不是1号,年、月不变,日减一即可
      dateString = trueYear+'/'+trueMonth+'/'+(trueDate-1);
    }else if(trueMonth==5||trueMonth==7||trueMonth==10||trueMonth==12){
    //如果‘日’是1号,就判断指定日期所在月分,5,7,10,12这几个月的前一个月都是30天,只需月减一,日设置为30即可
      dateString = trueYear+'/'+(trueMonth-1)+'/'+ 30;
    }else if(trueMonth==2||trueMonth==4||trueMonth==6||trueMonth==8||trueMonth==9||trueMonth==11){
    //如果是2,4,6,8,9,11这几个月的前一个月是31天,只需月减一,日设置为31即可
      dateString = trueYear+'/'+(trueMonth-1)+'/'+ 31;
    }else if(trueMonth==1){
    //如果是一月一号的话,年减一,月日设置为12/31
      dateString = (trueYear-1)+'/'+12+'/'+ 31;
    }else if(trueMonth==3){
    //如果是三月一号的话,就要判断年份是否闰年
      if(trueYear%4==0&&trueYear%100!=0||trueYear%400==0){
        dateString = trueYear+'/'+2+'/'+29
      }else{
        dateString = trueYear+'/'+2+'/'+28
      }
    }
    console.log(dateString);
    return new Date(dateString);
}
const today = new Date();
console.log(getYesterday(today));

运行的结果是:

2019/12/20
2019-12-19T16:00:00.000Z

可以发现dataString的结果2019/12/20是正确的,但是,日期却是:

2019-12-19T16:00:00.000Z

这是因为时间格式的问题,这个2019-12-19T16:00:00.000ZUTC通过标准时,我们是北京时区,北京时区是+8,所以2019-12-19T16:00:00.000Z指的就是北京时间的2019/12/20

<think>好的,用户想用JavaScript获取指定日期前后几天的日期,我得想想怎么回答。首先,用户可能需要的是给定一个日期,然后计算出这个日期之前或之后几天的日期。比如,给定2023-01-01,5天后是2023-01-06,或者3天前是2022-12-29。 那JavaScript里处理日期通常用Date对象。Date对象的方法可以获取和设置年、月、日等。不过直接修改天数的话,可能需要用getDate和setDate方法。比如,date.setDate(date.getDate() + days),这样就可以在当前日期上加减天数了。不过要注意月份和年份的自动调整,比如1月31日加1天会变成2月1日,这个逻辑Date对象会自动处理,所以可能不需要手动处理。 用户可能需要示例代码,所以应该提供一个函数,输入基准日期和天数,返回新的日期。比如: function getOffsetDate(baseDate, offsetDays) { let newDate = new Date(baseDate); newDate.setDate(newDate.getDate() + offsetDays); return newDate; } 这样应该可以解决问题。不过要注意的是,如果传入的baseDate是字符串的话,需要先转换成Date对象,否则可能会出错。比如用户可能传入"2023-01-01",需要用new Date("2023-01-01")来创建日期。 另外,用户可能还需要考虑时间的部分。比如原日期有时间的话,新的日期是否保留时间?使用setDate方法的话,时间部分应该保持不变,所以这可能符合预期。 另外,参考引用中的内容,比如引用[2]提到用getTime加上毫秒数来计算新的日期。比如: let date = new Date(2023, 0, 1); let newDate = new Date(date.getTime() + 5 * 24 * 60 * 60 * 1000); 这种方法也是可行的,而且可能更直接,尤其是处理较大的天数时。不过需要考虑夏令时等问题,但一般来说,添加毫秒数是比较可靠的方式。 所以,两种方法都可以,用户可以根据需要选择。两种方法的示例代码都可以提供,让用户了解不同的实现方式。 然后,用户可能需要格式化输出的日期,比如转换成YYYY-MM-DD格式。JavaScript原生的Date对象没有直接的格式化方法,可能需要手动处理。比如: function formatDate(date) { let year = date.getFullYear(); let month = (date.getMonth() + 1).toString().padStart(2, '0'); let day = date.getDate().toString().padStart(2, '0'); return `${year}-${month}-${day}`; } 这样,结合前面的函数,用户可以得到格式化的字符串。 在引用中,用户可能还提到了Date.parse()方法,但这个方法返回的是时间戳,可能在计算中不太直接有用,不过可以结合使用。比如,先获取时间戳,然后加上毫秒数,再创建新的日期。 总结下来,回答应该包括两种方法:使用setDate和基于时间戳的加减,并提供示例代码。同时提醒用户注意日期的创建方式,比如字符串解析是否正确,以及如何处理格式化的问题。 可能还需要提到时区的问题,比如使用new Date("2023-01-01")会解析为UTC时间,而使用new Date(2023, 0, 1)会解析为本地时间,这可能会导致差异。但用户的问题可能不涉及时区,所以可以暂时忽略,或者简单提一下。 最后,生成相关问题,比如如何格式化日期,如何处理跨月/年,或者如何计算两个日期的间隔,这些都可能与用户的问题相关。</think>### JavaScript获取指定日期前后日期的实现方法 要获取指定日期前后几天的日期,可以通过`Date`对象的日期计算功能实现。以下是两种常用方法及示例代码: --- #### 方法一:使用`setDate()`方法(推荐) 直接修改日期对象的天数值,支持正负偏移量: ```javascript function getOffsetDate(baseDate, offsetDays) { // 创建新对象避免修改原日期 const newDate = new Date(baseDate); newDate.setDate(newDate.getDate() + offsetDays); return newDate; } // 示例:计算2023-01-01的5天后日期 const baseDate = new Date('2023-01-01'); console.log(getOffsetDate(baseDate, 5)); // 输出: Fri Jan 06 2023 00:00:00 GMT+0800 ``` --- #### 方法二:时间戳计算 通过毫秒数进行精确计算(1天=86400000毫秒): ```javascript function getOffsetByTimestamp(baseDate, offsetDays) { const timestamp = baseDate.getTime(); return new Date(timestamp + offsetDays * 86400000); } // 示例:计算2023-01-01的3天前日期 const date = new Date(2023, 0, 1); // 月份从0开始计算 console.log(getOffsetByTimestamp(date, -3)); // 输出: Thu Dec 29 2022 00:00:00 GMT+0800 ``` --- #### 注意事项 1. **时区处理**:字符串格式日期(如`'2023-01-01'`)会被解析为UTC时间,构造函数参数(如`new Date(2023,0,1)`)则按本地时间解析[^2] 2. **日期格式化**:输出时可用`toISOString()`或自定义格式化函数: ```javascript function formatDate(date) { return date.toISOString().split('T')[0]; // YYYY-MM-DD格式 } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值