2012-03-23 160 views
3

我正在嘗試創建需要通過JavaScript獲取上季度和本季度日期的報告。該代碼上個月工作,但在三月份它不起作用。它顯示上季度爲本季度,本季度顯示爲下季度。我在這個項目中使用了datejs。這裏是我使用的代碼:通過Javascript獲取上季度和本季度的日期通過JavaScript

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; 
} 

任何人都知道爲什麼它不正確或有更簡單的方法嗎?

+0

?它是你的自定義代碼嗎? – orad 2012-12-08 15:23:18

+1

在我寫這篇文章的時候,我正在使用[dateJS](http://www.datejs.com/),但是,我已經切換到[Moment.js](http://momentjs.com/)。 DateJS在相當長的一段時間內沒有得到維護。 MomentJS得到了維護,其功能與一些附加功能相同。 – Keith 2012-12-10 14:27:59

+0

願這能幫助你。 http://stackoverflow.com/a/20989200/2837412 – 2014-01-08 07:14:42

回答

3

在第一功能變化

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) 

如果你使用moment.js會做同樣的工作

8

這可能會更容易:

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應該相當簡單。

+0

令人敬畏的代碼片段,但我注意到要獲得本季度的第一天,需要稍作修改 - 將startOf('month')更改爲endOf('month')並添加了一天:var lastQuarterStartDate = lastQuarterEnd.clone()。subtract(3,'months')。endOf('month')。add(1,'days') – bphillips 2015-04-01 19:45:43

+0

啊,很好。我想你也可以這樣做:var lastQuarterStartDate = lastQuarterEndDate.clone()。subtract({months:2})。startOf('month'); – trebuchetty 2015-04-13 20:23:28

0

使用這個簡單的代碼來獲得基於一月和四月

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

2

個使用moment.js庫它很簡單,得到如下特定季度的開始和結束日期:

您使用的日期的原型,如moveToLastDayOfMonth()什麼庫
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'); 
+1

上一季度的結束日期不應該是: '上個季度的結束日期= moment()。subtract(lastQuarterNumber,'quarter')。endOf('quarter');' – Nik 2016-09-03 15:14:07