通过Javascript获取上季度和本季度的日期

vatpfxk5  于 2023-01-07  发布在  Java
关注(0)|答案(8)|浏览(454)

我试图创建一个报告,需要通过Javascript获得上季度和本季度的日期。代码上个月工作,但在三月它不工作。它显示上季度作为本季度和本季度显示为下季度。我在这个项目中使用datejs。以下是我使用的代码:

function thisQuarterDates(from, to) {
    var month = Date.parse('today').toString('MM');
    var quarterMonth = (Math.floor(month/3)*3)+1;
    var year = Date.parse('today').toString('yyyy');

    var quarterStartDate = (quarterMonth < 10) ? quarterMonth+'/1/' +year : quarterMonth+'/1/'+ year;
    var quarterEndDate = Date.parse(quarterStartDate).add(2).months().moveToLastDayOfMonth().toString('M/d/yyyy');
    var today = Date.parse('today').toString('M/d/yyyy');

    document.getElementById(from).value = quarterStartDate;
    document.getElementById(to).value = quarterEndDate;
}

function lastQuarterDates(from, to) {
    var month = Date.parse('today').toString('MM');
    var quarter = (Math.floor(month/3))+1;
    var lastQuarter = (quarter > 1) ? quarter - 1 : lastQuarter = 4;
    var year;
    if (((((lastQuarter-1)*3)+1) < 10))
    {
        year = Date.parse('today').toString('yyyy');
    }
    else
    {
        year = Date.parse('today').add(-1).years().toString('yyyy');
    }
    var firstDate = ((((lastQuarter-1)*3)+1) < 10) ? (((lastQuarter-1)*3)+1) +'/1/'+ year : (((lastQuarter-1)*3)+1) +'/1/'+ year;
    var lastDate = Date.parse(firstDate).add(2).months().moveToLastDayOfMonth().toString('M/d/yyyy');

    document.getElementById(from).value = firstDate;
    document.getElementById(to).value = lastDate;
}

有人知道为什么它是不正确的吗?或者有更简单的方法吗?

jc3wubiy

jc3wubiy1#

纯JS中的简单通用解决方案。
首先计算季度号

const today = new Date();
const quarter = Math.floor((today.getMonth() / 3));

下一个,当前季度

const startFullQuarter = new Date(today.getFullYear(), quarter * 3, 1);
const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0);

上一季度

const startFullQuarter = new Date(today.getFullYear(), quarter * 3 - 3, 1);
const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0);

在表达式new Date(today.getFullYear(), quarter * 3 - x, 1)中每季度加上或减去3's,以获得未来或过去的季度。

anhgbhbe

anhgbhbe2#

如果你使用的是moment.js,这可能会更容易:

var quarterAdjustment= (moment().month() % 3) + 1;
var lastQuarterEndDate = moment().subtract({ months: quarterAdjustment }).endOf('month');
var lastQuarterStartDate = lastQuarterEndDate.clone().subtract({ months: 3 }).startOf('month');

转换到date.js应该相当容易。

carvr3hs

carvr3hs3#

使用 * a moment.js库**可以非常简单地获取特定季度的开始和结束日期,如下所示:

Start date of last quarter = moment().subtract(lastQuarterNumber, 'quarter').startOf('quarter');

End date of last quarter = moment().subtract(lastQuarterNumber, 'quarter').endOf('quarter');

Start date of current quarter = moment().startOf('quarter');

End date of current quarter = moment().endOf('quarter');
sg3maiej

sg3maiej4#

在第一次功能变更时

var quarterMonth = (Math.floor(month/3)*3)+1;

var quarterMonth = (Math.floor((month-1)/3)*3)+1;

而在第二函数上

var quarter = (Math.floor(month/3))+1;

var quarter = (Math.floor((month-1)/3))+1;

我觉得会没事的。
对于第二个函数我不认为

((((lastQuarter-1)*3)+1) < 10)

一个简单的

(lastQuarter < 4)

我也会做同样的工作

j9per5c4

j9per5c45#

使用moment.js

  • 本季度开始:第一个月
  • 本季度结束:moment().endOf('quarter')
  • 上一季度开始日期:moment().subtract(1, 'quarter').startOf('quarter')
  • 上一季度结束日期:moment().subtract(1, 'quarter').endOf('quarter')
  • 下一季度开始:moment().add(1, 'quarter').startOf('quarter')
  • 下季度末:moment().add(1, 'quarter').endOf('quarter')
aoyhnmkz

aoyhnmkz6#

我使用date-fns库已经有一段时间了,它提供的方法在解决此类问题时非常有用。
您可以使用addQuartersubQuarter方法。
代码如下所示:

const lastQuarterStartDate = startOfQuarter(subQuarters(new Date(2014, 8, 1),1))

    const lastQuarterEndDate = lastDayOfQuarter(subQuarters(new Date(2014, 8, 1),1))

    const thisQuarterStartDate = startOfQuarter(new Date(2014, 8, 1))

    const thisQuarterEndDate = lastDayOfQuarter(new Date(2014, 8, 1))

参考:https://date-fns.org/v2.21.2/docs/addQuarters

tnkciper

tnkciper7#

使用这个简单的代码得到基于一月和四月的所有季度
Demo

    • 代码:**
// startMonth should be january or april

  function setQuarter(startMonth) {
    var obj = {};
    if(startMonth=='january'){

        obj.quarter1 = {start:moment().month(0).startOf('month'),end:moment().month(2).endOf('month')}
        obj.quarter2 = {start:moment().month(3).startOf('month'),end:moment().month(5).endOf('month')}
        obj.quarter3 = {start:moment().month(6).startOf('month'),end:moment().month(8).endOf('month')}
        obj.quarter4 = {start:moment().month(9).startOf('month'),end:moment().month(11).endOf('month')}
        console.log(obj);
        return obj;
    }
    else if(startMonth=='april'){

        obj.quarter1 = {start:moment().month(3).startOf('month'),end:moment().month(5).endOf('month')}
        obj.quarter2 = {start:moment().month(6).startOf('month'),end:moment().month(8).endOf('month')}
        obj.quarter3 = {start:moment().month(9).startOf('month'),end:moment().month(11).endOf('month')}
        obj.quarter4 = {start:moment().month(0).startOf('month').add('years',1),end:moment().month(2).endOf('month').add('years',1)}
        console.log(obj);
        return obj;
    }
}

 setQuarter('april');

Fiddle

ejk8hzay

ejk8hzay8#

使用此功能,我们可以动态获得季度的开始和结束日期,而不考虑财政年度(季度)的开始。

var fYearStart=new Date('2021-1-29') //Pass your financial year's start date
var q1Start=new Date(fYearStart.getFullYear(),fYearStart.getMonth(),1)
var dummy1=new Date(fYearStart.getFullYear(),fYearStart.getMonth(),1)
var dummy5=new Date(fYearStart.getFullYear(),fYearStart.getMonth(),1)
var q1End=new Date(dummy1.setMonth(dummy1.getMonth()+3))
var q1FinalEnd=new Date(dummy5.setMonth(dummy5.getMonth()+3))
q1FinalEnd.setSeconds(q1End.getSeconds()-1)
console.log(q1Start.toLocaleString())
console.log(q1FinalEnd.toLocaleString())
var q2Start=new Date(q1End.getFullYear(),q1End.getMonth(),1)
var dummy2=new Date(q1End.getFullYear(),q1End.getMonth(),1)
var dummy6=new Date(q1End.getFullYear(),q1End.getMonth(),1)
var q2End=new Date(dummy2.setMonth(dummy2.getMonth()+3))
var q2FinalEnd=new Date(dummy6.setMonth(dummy6.getMonth()+3))
q2FinalEnd.setSeconds(q2End.getSeconds()-1)
console.log(q2Start.toLocaleString())
console.log(q2FinalEnd.toLocaleString())
var q3Start=new Date(q2End.getFullYear(),q2End.getMonth(),1)
var dummy3=new Date(q2End.getFullYear(),q2End.getMonth(),1)
var dummy7=new Date(q2End.getFullYear(),q2End.getMonth(),1)
var q3End=new Date(dummy3.setMonth(dummy3.getMonth()+3))
var q3FinalEnd=new Date(dummy7.setMonth(dummy7.getMonth()+3))
q3FinalEnd.setSeconds(q3End.getSeconds()-1)
console.log(q3Start.toLocaleString())
console.log(q3FinalEnd.toLocaleString())
var q4Start=new Date(q3End.getFullYear(),q3End.getMonth(),1)
var dummy4=new Date(q3End.getFullYear(),q3End.getMonth(),1)
var dummy8=new Date(q3End.getFullYear(),q3End.getMonth(),1)
var q4End=new Date(dummy4.setMonth(dummy4.getMonth()+3))
var q4FinalEnd=new Date(dummy8.setMonth(dummy8.getMonth()+3))
q4FinalEnd.setSeconds(q4End.getSeconds()-1)
console.log(q4Start.toLocaleString())
console.log(q4FinalEnd.toLocaleString())

相关问题