[英]Calculate past dates from today in JavaScript
下面的JavaScript对象设置了一些过去的日期值。 我需要使用JavaScript从当前日期开始计算这些值。
现在,日期值已手动设置,但应该使用JavaScript自动计算
例如,“ Last Week
的日期应以当前周的开始日期为准,并使用该日期之前的end date
作为“ Last Week
的end date
,然后在该start date
之前计数6天以获得“ Last Week
的start 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'
}
}
该日历图像根据命名的持续时间值可视化了我需要获取的start
和end
日期。
对于last week
我需要确定从今天start
的上周start
和end
的日期。 在此示例中将是:
start date: 1/4/2016
end date: 1/10/2016
至end 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.