我可以定义一个对象吗';在Javascript中使用自引用函数的属性?

我可以定义一个对象吗';在Javascript中使用自引用函数的属性?,javascript,date,object,Javascript,Date,Object,我试图根据当前日期确定四个日期——从当前支付期的开始到今天,然后是前一个支付期的开始和结束日期——但我很难找到正确的执行日期 对我来说,有一个具有四个属性的对象是有意义的,比如payPd.currentStart、payPd.currentEnd、payPd.priorStart和payPd.priorEnd 目前,我正在从.currentEnd(即今天)向后工作,并减去天数,直到奇数周的星期一——支付周期为两周: var dt = new Date(); Date.prototyp

我试图根据当前日期确定四个日期——从当前支付期的开始到今天,然后是前一个支付期的开始和结束日期——但我很难找到正确的执行日期

对我来说,有一个具有四个属性的对象是有意义的,比如payPd.currentStart、payPd.currentEnd、payPd.priorStart和payPd.priorEnd

目前,我正在从.currentEnd(即今天)向后工作,并减去天数,直到奇数周的星期一——支付周期为两周:

 var dt = new Date();

    Date.prototype.getWeek = function () {
        var onejan = new Date(this.getFullYear(), 0, 1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay() + 1) / 7);
    }

    var currentStart = '';
    var currentEnd = new Date();
    var priorStart = '';
    var priorEnd =   '';

    function ppdStart(currentEnd){
    var inDate = currentEnd;
        while (inDate.getWeek() % 2 !== 0 || inDate.getDay() !== 1) {
        inDate.setDate(inDate.getDate() - 1);
        }
        return outDate;
        }
所以问题是,我能否定义一个属性,然后将下一个属性定义为该属性的函数(今天之前的下一个星期一),依此类推?我想要一个回调函数,还是一个get/set?我不知道下一步该去哪里


多亏了Javascript社区的所有人,我才刚刚加入。

我个人不会为这种功能扩展原型。您还可以在date对象周围有一个包装器,用于处理基于最初发送的日期的任何计算

然后,可以使用该日期进入相对于原始日期的下一个或上一个期间

我添加了我的意思的一个片段,它为您提供了一种简单的方法来确定您最初要求的日期,以及付款日期。然后,付款的结束期将是下一个期间的开始日期减去1天

//来自:https://stackoverflow.com/a/7751977/3231537
常数两周=12096e5;
//发件人:https://gist.github.com/dblock/1081513
变量weekOfYear=函数(日期){
var d=新日期(+日期);
d、 设定小时数(0,0,0);
d、 设置日期(d.getDate()+4-(d.getDay()| 7));
返回Math.ceil(((d-newdate(d.getFullYear(),0,1))/8.64e7)+1)/7);
};
类PayDateHelper{
建造商(日期){
此日期=日期;
}
下一个类型(){
返回新的PayDateHelper(新日期(this.currentDate.getTime()+两周));
}
上一个发薪期(){
返回新的PayDateHelper(新日期(this.currentDate.getTime()-twoWeeks));
}
获取当前日期(){
返回此日期;
}
获取付款日期(){
设区间=0;
//当我们处于偶数周时,减去7天
如果(weekOfYear(this.currentDate)%2==0){
间隔+=7;
}
//并将一周中的天数减回到1(星期一)
间隔+=(this.currentDate.getDay()-1);
const date=新日期(this.currentDate);
date.setDate(date.getDate()-interval);
返回日期;
}
}
console.log('--current period');
让helper=newpaydatehelper(newdate());
console.log(helper.currentDate);
console.log(helper.payDate);
log('--next period');
设nextPeriod=helper.nextPeriod();
console.log(nextPeriod.currentDate);
console.log(nextPeriod.payDate);
console.log('--previousperiod');
设previousPeriod=helper.previousPayPeriod();
console.log(previousPeriod.currentDate);

console.log(previousPeriod.payDate)您似乎希望执行以下操作(在伪代码中):

将“今天”设置为任意值,并相应地更新“昨天”和“今天”

您可以使用一个,这样获取昨天和明天的值将基于今天的值来计算它们

e、 g

让obj={
得到昨天{
如果(this.today!=未定义){
设d=新日期(今天);
d、 setDate(d.getDate()-1);
返回d;
}否则{
返回void 0;
}
},
明天到{
如果(this.today!=未定义){
设d=新日期(今天);
d、 设置日期(d.getDate()+1);
返回d;
}否则{
返回void 0;
}
}
};
//初始值
console.log('昨天:'+对象昨天)
console.log('Today:'+obj.Today)
console.log('明天:'+对象明天)
//今天定
obj.today=新日期();
//获取价值
log('beday:'+obj.beday.toDateString());
log('Today:'+obj.Today.toDateString());

log('Tomrrow:'+obj.tomory.toDateString())
您想在
日期
对象上专门执行此操作吗,或者您是否为这样的库打开,这样可以帮助您完成大量工作?您所说的“奇数周的星期一”是什么意思?如果你指的是一年中的一周,你如何处理一些年份有52周而其他年份有53周?在53周的情况下,是否有一周或三周的支付期?如果使用两周,最好从特定的开始日期(历元)开始计算,并将两周相加为14天的倍数。不要使用小时,因为夏令时转换将在罕见和难找的情况下让你陷入困境。@robg这些都是好问题,老实说,我只是查找了一个“获取周数”功能并将其插入。至于DST,我想不出关闭3600秒会破坏该功能的实例。不过,我会研究那个划时代的东西,我很高兴能够获得更多关于这方面的信息:)啊!很高兴能为班级指明方向。我甚至不知道要考虑它们。谢谢:D
let obj = {
  today: new Date(),
  yesterday: today - 1 day,
  tomorrow: today + 1 day
};