簡體   English   中英

用JavaScript計算今天的過去日期

[英]Calculate past dates from today in JavaScript

下面的JavaScript對象設置了一些過去的日期值。 我需要使用JavaScript從當前日期開始計算這些值。

現在,日期值已手動設置,但應該使用JavaScript自動計算

例如,“ Last Week的日期應以當前周的開始日期為准,並使用該日期之前的end date作為“ Last Weekend date ,然后在該start date之前計數6天以獲得“ Last Weekstart date

如何在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'
    }
}

該日歷圖像根據命名的持續時間值可視化了我需要獲取的startend日期。

對於last week我需要確定從今天start的上周startend的日期。 在此示例中將是:
start date: 1/4/2016 end date: 1/10/2016end date: 1/10/2016

在此處輸入圖片說明

如果我正確理解..這應該可以解決問題。

 $(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); }); 

沒有庫就可以手動計算它。 只是做這樣的事情:

 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()來根據當地時間獲取星期的開始(返回0-6) ,並據此進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM