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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9840512/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 07:59:45  来源:igfitidea点击:

Get dates for last quarter and this quarter through Javascript

javascripthtml

提问by Keith

I'm trying to create a report that needs to get the dates for last quarter and this quarter through Javascript. The code worked last month but in March it doesn't work. It shows last quarter as this quarter and this quarter shows as next quarter. I am using datejs in this project. Here is the code I am using:

我正在尝试创建一个报告,该报告需要通过 Javascript 获取上一季度和本季度的日期。该代码上个月有效,但在 3 月份无效。上季度显示为本季度,本季度显示为下季度。我在这个项目中使用 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;
}

Anyone know why it's incorrect or is there an easier way?

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

采纳答案by pater

On the first function change

关于第一个功能变化

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

with

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

and on the second function

和第二个功能

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

with

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

and I think it will be fine.

我认为会没事的。

And on the second function I don't see the point of

而在第二个功能上,我看不到重点

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

a simple

一个简单的

(lastQuarter < 4)

will do the same job

会做同样的工作

回答by trebuchetty

if you're using moment.js this might be easier:

如果您使用的是 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');

conversion to date.js should be fairly easy.

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

回答by Biswajit

Using moment.js libraryits very simple to get the start and end date of a particular quarter as follows:

使用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');

回答by Walter Luszczyk

Simple generic solution in pure JS.
First calculate quarter number:

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

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

Next, current quarter:

接下来,当前季度

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

Previous quarter

上一季度

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

Add or subtract 3'sper quarter in expression new Date(today.getFullYear(), quarter * 3 - x, 1)to get future or past quarters.

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

回答by Davide

Using moment.js:

使用moment.js

  • This quarter START: moment().startOf('quarter')
  • This quarter END: moment().endOf('quarter')
  • Previous quarter START: moment().subtract(1, 'quarter').startOf('quarter')
  • Previous quarter END: moment().subtract(1, 'quarter').endOf('quarter')
  • Next quarter START: moment().add(1, 'quarter').startOf('quarter')
  • Next quarter End: moment().add(1, 'quarter').endOf('quarter')
  • 本季度开始: moment().startOf('quarter')
  • 本季度结束: 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')

回答by Nishchit Dhanani

Use this simple code to get all quarter based on january and april

使用这个简单的代码获得基于 1 月和 4 月的所有季度

Demo

Demo

Code :

代码 :

 // 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

Fiddle