2016-01-15 83 views
0

下面的JavaScript對象有一些過去的日期值設置。我需要使用JavaScript從當前日期計算這些值。使用JavaScript從今天起計算過去日期

眼下的日期值手動設置,但他們應該會自動使用JavaScript

計算

例如,對於Last Week日期應以當前周的開始日期之前使用該日爲end dateLast Week然後在6天前計算得到start dateLast Week

如何在JS中執行此操作並在所有瀏覽器中工作?

我很好用MomentJS是對這種類型的事情有用嗎?

// Date Divider Date values for cocomparisoagainstt Tasks created_at DateTime 
var dateRangeLabels = { 
    'Today': { 
     'start': new Date('2015-09-12T00:00:00'), 
     'end': new Date('2015-09-12T00:00:00'), 
     'dateFunc': 'inRange' 
    }, 
    'Yesterday': { 
     'start': new Date('2015-09-11T00:00:00'), 
     'end': new Date('2015-09-11T00:00:00'), 
     'dateFunc': 'inRange' 
    }, 
    'Earlier this Week': { 
     'start': new Date('2015-09-06T00:00:00'), 
     'end': new Date('2015-09-10T00:00:00'), 
     'dateFunc': 'inRange' 
    }, 
    'Last Week': { 
     'start': new Date('2015-08-30T00:00:00'), 
     'end': new Date('2015-09-05T00:00:00'), 
     'dateFunc': 'inRange' 
    }, 
    'A while Ago': { 
     'start': new Date('2010-08-30T00:00:00'), 
     'end': new Date('2015-07-31T00:00:00'), 
     'dateFunc': 'inRange' 
    }, 
    'Last Month': { 
     'start': new Date('2015-08-01T00:00:00'), 
     'end': new Date('2015-08-31T00:00:00'), 
     'dateFunc': 'inRange' 
    }, 
    'Earliar in the Month': { 
     'start': new Date('2015-08-30T00:00:00'), 
     'end': new Date('2015-09-05T00:00:00'), 
     'dateFunc': 'inRange' 
    }, 
    'other': { 
     'start': new Date('2015-09-13T00:00:00'), 
     'end': new Date('2999-12-31T00:00:00'), 
     'dateFunc': 'inRange' 
    } 
} 

該日曆圖像的可視化和start日期end我需要得到基於命名的持續時間值。

對於last week我需要確定上週從今天開始的startend的日期。在這個例子是:
start date: 1/4/2016end date: 1/10/2016

enter image description here

+0

也許從SQL,組他們得到的日期,並通過爲JSON? – Andrew

+0

可能的重複[如何格式化xxx以來的時間「4分鐘前」類似於Stack Exchange網站](http://stackoverflow.com/questions/3177836/how-to-format-time-since-xxx-eg-4-minutes-ago-similar-to-stack-交換網站) –

+0

@JesseSielaff這是不同的,因爲它需要基於不同的持續時間從今天開始的非常具體的開始和結束日期 – JasonDavis

回答

1

如果我理解正確..這應該做的伎倆。

$(function() { 
 
      convertDays = function (d) { 
 
       //Convert days into MilliSeconds 
 
       return d * 86400000; 
 
      } 
 

 
      var today = new Date(); 
 
      var dateRangeLabels = { 
 
       Today: { 
 
        start: today, 
 
        end: today, 
 
        dateFunc: 'inRange' 
 
       }, 
 
       Yesterday: { 
 
        start: new Date(today - convertDays(1)), 
 
        end: today, 
 
        dateFunc: 'inRange' 
 
       }, 
 
       WeekAgo: { 
 
        start: new Date(today - convertDays(7)), 
 
        end: today, 
 
        dateFunc: 'inRange' 
 
       } 
 
      }; 
 

 
      console.log(dateRangeLabels); 
 

 
     });

編輯:包括數週和數月的第一&最後一天。這當然可以按照您的喜好縮放。

$(function() { 
 
      convertDays = function (d) { 
 
       //Convert days into MilliSeconds 
 
       return d * 86400000; 
 
      } 
 
      fDayofWeek = function (d) { 
 
       return new Date(d - convertDays(d.getDay())); 
 
      } 
 
      lDayofWeek = function (d) { 
 
       return new Date((d - convertDays(d.getDay())) + convertDays(6)); 
 
      } 
 
      fDayofMonth = function (d) { 
 
       return new Date(d.getFullYear(), d.getMonth(), 1); 
 
      } 
 
      lDayofMonth = function (d) { 
 
       return new Date(d.getFullYear(), d.getMonth() + 1, 0); 
 
      } 
 

 
      var today = new Date(); 
 
      var dateRangeLabels = { 
 
       Today: { 
 
        start: today, 
 
        end: today, 
 
        dateFunc: 'inRange' 
 
       }, 
 
       Yesterday: { 
 
        start: new Date(today - convertDays(1)), 
 
        end: today, 
 
        dateFunc: 'inRange' 
 
       }, 
 
       WeekAgo: { 
 
        start: new Date(today - convertDays(7)), 
 
        end: today, 
 
        dateFunc: 'inRange' 
 
       }, 
 
       ThisWeek: { 
 
        start: fDayofWeek(today), //Sunday 
 
        end: lDayofWeek(today) //Saturday 
 
       }, 
 
       ThisMonth: { 
 
        start: fDayofMonth(today), 
 
        end: lDayofMonth(today) 
 
       } 
 
      }; 
 

 
      console.log(dateRangeLabels); 
 

 
     });

+0

感謝這對他們中的一些人來說是一個不錯的方法,但是像'上週'這樣的難度更大的人需要獲得前一週的開始日期,可以說前一週的星期一和上週星期日的結束日期。在這種情況下,而不是在7天前計算,前一週可能僅在一天或兩天前結束。這樣的日期可以用這個來決定嗎? thnaks – JasonDavis

+0

讓我知道我的新編輯是否適合你。 – hack3rfx

+0

這太棒了,奇怪的是,當你做了上一個星期和上個月的開始和結束時,所以我做了2個你沒有這麼做的組合,現在我已經完成了!謝謝 – JasonDavis

0

它不會是太難手動計算它沒有一個圖書館。剛做這樣的事情:

function sq(num) { 
    return num * num; 
} 
var times = { 
    "min": 60, 
    "hour": sq(60), 
    "day": (sq(60) * 24), 
    "week": (sq(60) * 24 * 7), 
    "month": (sq(60) * 24 * 7 * 4), 
    "year": (sq(60) * 24 * 7 * 4 * 12) 
}; 
return function(date, max) { 
    if (!date) return ""; 
    var d = new Date(date), 
    diff = ((Date.now() - d.getTime())/1000); 
    if (diff < times.min) { 
    return "now"; 
    } else if (diff < times.hour) { 
    return Math.floor(diff/times.min) + " min ago"; 
    } else if (diff < times.day) { 
    return Math.floor(diff/times.hour) + " hours ago"; 
    } else if (diff < times.week) { 
    return Math.floor(diff/times.day) + " days ago"; 
    } else if (diff < times.month) { 
    return Math.floor(diff/times.week) + " weeks ago"; 
    } else if (diff < times.year) { 
    return Math.floor(diff/times.month) + " months ago"; 
    } //else over a year 
    return "over a year ago"; 
}; 

您可以使用Date.getDay()來獲得按照本地時間(returns 0-6)的一週的開始,並相應地調整上面。

+0

這與我所需要的有所不同。這需要日期並計算從今天開始的持續時間,我需要今天取而代之,並確定日期將在設定的持續時間內。所以'上週'我需要上週的開始日期和結束日期 – JasonDavis

相關問題