我試圖在 2 個時間戳和特定日期名稱之間獲取一整天。
我有一個 start1 是時刻(第一次約會)和 end1 是時刻(最后一次約會)。我有一個帶有 id (day) 的日期串列。
this.datesDailySelected = [];
var start1 = moment(new Date(this._data.row.plannedDispatch));
var end1 = moment(this.datesForm.controls["dailyExpiryDate"].value);
this.selectedItemsList.forEach((item) => {
var current = start1.clone();
var day;
switch (item.name) {
case "Sunday":
day = 0;
break;
case "Monday":
day = 1;
break;
case "Tuesday":
day = 2;
break;
case "Wednesday":
day = 3;
break;
case "Thursday":
day = 4;
break;
case "Friday":
day = 5;
break;
case "Saturday":
day = 6;
break;
}
while (current.day(7 day).isBefore(end1)) {
this.datesDailySelected.push(current.clone().format("YYYY-MM-DD"));
}
console.log(this.datesDailySelected);
});
無論我選擇 2 個日期和一個特定的日期名稱示例(星期五),我都會檢索本周沒有日期的所有日期!
我覺得我的代碼有問題。
真實體子:
start1 : "2021-12-20T07:50:00.000Z"
end1: "2021-12-25T07:50:00.000Z"
day choosed: friday with day = 5
output = empty list.
output must be ["2021-12-24"]
uj5u.com熱心網友回復:
示例時間戳是 UTC,但作業是使用本地日期,因此以下內容相同。這可能會在具有不同時區偏移的主機上產生不同的結果。如果您想要所有 UTC,那么只需將所有方法更改為 UTC 方法(setHours到setUTCHours,getDate到getUTCDate等)。
您可以使用陣列和indexOf而不是長開關塊更簡單地將日期名稱轉換為數字。
獲取特定日期的第一個實體也相當簡單,但您必須檢查它是否不在開始之前(例如,如果日期范圍是周四到周一并且您想要太陽,那么演算法會在周四之前找到太陽,不是之后)。所以有一個檢查,如果它在開始之前,則增加一周。
然后只需檢查結束日期并將時間戳推入每天的結果陣列,然后添加 7 天,等等。
您可以使用庫來完成這一切,但在普通 JS 中并不難:
function getDaysBetween(d1, d2, day) {
// Convert day name to number
let days = ['su','mo','tu','we','th','fr','sa'];
let dayNum = days.indexOf(day.toLowerCase().substr(0,2));
// Convert timestamps to Dates and set to start of day
let start = new Date(d1);
start.setHours(0,0,0,0);
let end = new Date(d2);
end.setHours(0,0,0,0);
// Get first instance of day name in same week as start
let d = new Date(start);
d.setDate(d.getDate() - d.getDay() dayNum);
// If before start, add 7 days
if (d < start) d.setDate(d.getDate() 7);
let result = [];
while (start <= end) {
result.push(start.toLocaleDateString('en-CA'));
start.setDate(start.getDate() 7)
}
return result;
}
let start = '2021-12-20T07:50:00.000Z';
let end = '2021-12-25T07:50:00.000Z';
let day = 'Friday';
console.log(getDaysBetween(start, end, day));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/388709.html
標籤:javascript 有角的 日期 瞬间 角力矩
