[英]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.