繁体   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