【问题标题】:JavaScript in function Date var argument changes for no reason?函数 Date var 参数中的 JavaScript 无故更改?
【发布时间】:2022-11-20 04:17:45
【问题描述】:

菜鸟在这里。对不起,如果这个问题很愚蠢。 我正在为旅行目的编写脚本。 给定星期几,我需要获取出发日期的开始和结束日期。 以及给定开始/结束日期偏移量的退货日期; 调用函数后,出发日期也发生了变化。 我无法理解我的错误。请帮忙。



var departstart=getNextDayOfTheWeek(3,0);
console.log("Departure from " + departstart);
var departend=getNextDayOfTheWeek(3,0);
console.log("Departure to " + departend);
var returnstart=getoffday(3,departstart);
// check again depature
console.log("Departure from " + departstart);
// Has changed?!?!?!
console.log("Return from " + returnstart);
var returnend=getoffday(3,departstart);
console.log("Return to " + returnend);

// Gets a date of next day of the week
function getNextDayOfTheWeek(dayOfWeek, excludeToday = true, refDate = new Date()) {

    refDate.setHours(0,0,0,0);
    refDate.setDate(refDate.getDate() + +!!excludeToday +
                    (dayOfWeek + 7 - refDate.getDay() - +!!excludeToday) % 7);
    return (refDate);

}

// Gets a date of diff day from given date
function getoffday(diff=0, workyday = new Date()) {
console.log("Inside function before execution " + workyday);
workyday.setHours(0,0,0,0);
workyday.setDate(workyday.getDate() + diff);
console.log("Inside function after execution " + workyday);
return (workyday);
}

我想也许我不应该在函数中使用参数并定义局部变量,但这没有帮助。

【问题讨论】:

  • 日期函数调整日期,因此当您将日期传递给 getoffday() 时,它会发生变化。

标签: javascript function date


【解决方案1】:

如果您不想一直修改某个日期(就像现在一样),您可以例如修改你的getoffday函数如下:

// Gets a date of diff day from given date
function getoffday(diff=0, workyday = new Date()) {
    // we create a new Date object with the value of the provided "workyday" param
    // now we modify only this copied date - the provided date does not change
    const dateCopy = new Date(workyday.getTime());
    console.log("Inside function before execution " + dateCopy);
    dateCopy.setHours(0,0,0,0);
    dateCopy.setDate(dateCopy.getDate() + diff);
    console.log("Inside function after execution " + dateCopy);
    return (dateCopy);
}

当然,您可以对getNextDayOfTheWeek 函数使用相同的方法。通过这种方式,您可以获得孤立的结果(不受函数外部变量值的影响)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2013-07-19
    • 2021-07-19
    相关资源
    最近更新 更多