我正在尝试创建一个报告,需要通过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;
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么它不正确或有更简单的方法吗?
小智 10
如果你正在使用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');
Run Code Online (Sandbox Code Playgroud)
转换为date.js应该相当容易.
纯 JS 中的简单通用解决方案。
首先计算季度数:
const quarter = Math.floor((today.getMonth() / 3));
const today = new Date();
Run Code Online (Sandbox Code Playgroud)
接下来,当前季度:
const startFullQuarter = new Date(today.getFullYear(), quarter * 3, 1);
const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0);
Run Code Online (Sandbox Code Playgroud)
上一季度
const startFullQuarter = new Date(today.getFullYear(), quarter * 3 - 3, 1);
const endFullQuarter = new Date(startFullQuarter.getFullYear(), startFullQuarter.getMonth() + 3, 0);
Run Code Online (Sandbox Code Playgroud)
3's在表达式中每季度加或减new Date(today.getFullYear(), quarter * 3 - x, 1)以获得未来或过去的季度。
在第一次功能更改时
var quarterMonth = (Math.floor(month/3)*3)+1;
Run Code Online (Sandbox Code Playgroud)
和
var quarterMonth = (Math.floor((month-1)/3)*3)+1;
Run Code Online (Sandbox Code Playgroud)
以及第二个函数
var quarter = (Math.floor(month/3))+1;
Run Code Online (Sandbox Code Playgroud)
和
var quarter = (Math.floor((month-1)/3))+1;
Run Code Online (Sandbox Code Playgroud)
我想一切都会好起来的。
在第二个功能上我不明白有什么意义
((((lastQuarter-1)*3)+1) < 10)
Run Code Online (Sandbox Code Playgroud)
一个简单的
(lastQuarter < 4)
Run Code Online (Sandbox Code Playgroud)
会做同样的工作
小智 5
使用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');
Run Code Online (Sandbox Code Playgroud)