我想知道如何在javascript中獲取日期范圍內的資料
我有一個物件陣列obj和變數sdate和edate,
我有一個物件陣列obj和變數sdate和edate,
如果cdate在sdate和edate之間,如何獲得陣列物件?
function getdate(){
var finals=[];
var result = obj.orders.filter(e=> //span>{
if(e.cdate < sdate & & e.cdate > edate){
finals.push(e)。
}
})
}
var obj={
orders:[
{id:1, mode: "xyz", orderid: 123, cdate: "2017-2-13 07:33:30"}。
{id:2, mode: "abc", orderid: 456, cdate: "2018-4-20 06:10:30"}。
{id:3, mode: "xyz", orderid: 768, cdate: "2020-8-10 08:00:00"}。
]
}
varsdate="11-5-2020"
var edate="20-2-2021"
預期 產出
[
{id:3, mode: "xyz", orderid: 768, cdate: "2020-8-10 08:00:00"}。
]
uj5u.com熱心網友回復:
你有幾個問題
之間的測驗錯誤:date >= sdate && date <= edate才是你需要的
如果你不能改變sdate、edate和物件日期,你仍然可以格式化,仍然可以進行字串操作,由于時區和夏令時的關系,這比日期操作更快、更安全。let obj={
orders:[
{id:1, mode: "xyz", orderid: 123, cdate: "2017-2-13 07:33:30"}。
{id:2, mode: "abc", orderid: 456, cdate: "2018-4-20 06:10:30"}。
{id:3, mode: "xyz", orderid: 768, cdate: "2020-8-10 08:00:00"}。
]
}
const getyyyymmdd = str => {
const parts = str.split(" ") [0] 。 split("-")
return parts[0].length === 2 ? `${parts[2]}-${parts[1] 。 padStart(2, '0')}-${parts[0] 。 padStart(2, '0')}` : `${parts[0] 。 padStart(2, '0')}-${parts[1] 。 padStart(2, '0')}-${parts[2] } `
}
function getdate(date,edate){
sdate = getyyyymmdd(sdate)
edate = getyyyymmdd(edate)
return obj.orders.filter(({cdate}) => /span> {
cdate = getyyyymmdd(cdate)。
return cdate >= sdate & & cdate <= edate
})
}
console. log(getdate("11-5-2020","20-2-2021"))
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
另外,如果你能改變其中任何一個日期,你可以在物件中加入前導0,并交換開始和結束日期的順序
。let obj={
orders:[
{id:1, mode: "xyz", orderid: 123, cdate: "2017-02-13 07:33:30"}。
{id:2, mode: "abc", orderid: 456, cdate: "2018-04-20 06:10:30"}。
{id:3, mode: "xyz", orderid: 768, cdate: "2020-08-10 08:00:00"}。
]
}
function getdate(sdate,edate){
return obj.orders.filter(item => {
return item.cdate.split(" ")[0] >= sdate & & item。 cdate.split(" ") [0] <= edate
})
}
console. log(getdate("2020-05-11","2021-02-20")) /code>
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
在你的嘗試中,你正在將你的sdate和edate與陣列中onjects的cdate節點進行比較。這將只形成字串比較,因為它們都是字串。為了進行日期比較,你必須將它們都轉換成Date物件。你的cdate是一個標準的日期物件,所以new Date()將檢索字串的日期物件。
但是你的sdate和edate不是有效的日期字串。所以我把它們拆開,用它來創建新的日期物件。比較日期物件將為您提供預期的結果。
我還將endDate的小時數設定為23, 59, 59, 999。這是為了確保如果陣列中的一個日期與結束日期相同,這應該被過濾掉。因為這是特定日期的結束日期的最大值。
另外,你不需要在過濾函式中推送finals.push(e)。相反,你可以簡單地在你的過濾器中回傳該比較的狀態。這將生成一個新的陣列。這將是你預期的結果。
你計算兩個日期之間的值的邏輯是錯誤的,我也糾正了。
。var sdate = "11-5-2020";
var edate = "20-2-2021";
var obj = {
orders: [
{ id: 1, mode: "xyz", orderid: 123, cdate: "2017-2-13 07:33:30" }。
{ id: 2, mode: "abc", orderid: 456, cdate: "2018-4-20 06:10:30" },
{ id: 3, mode: "xyz", orderid: 768, cdate: "2020-8-10 08:00:00" }
]
}
function getdate() {
var finals = [];
const [sDay, sMonth, sYear] = sdate.split('-'/span>)。
const [eDay, eMonth, eYear] = edate.split('-') 。
const startDate = new Date(sYear, sMonth - 1, sDay)。
const endDate = new Date(eYear, eMonth - 1, eDay, 23, 59, 59, 999)。)
var result = obj.orders. filter(e => (new Date(e. cdate) >= startDate && new Date(e.cdate) <= endDate) )。)
return result。
}
console.log(getdate());
<iframe name="sif3" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
請注意如果日期是標準的ISO格式,你可以對它們進行字串比較。如果你想利用這一點,你需要把開始和結束日期變成iso格式,然后進行perfrom比較。所以過濾陳述句將是
var result = obj.orders. filter(span class="hljs-params">e => e. cdate >= startDate.toISOString() && e.cdate <= endDate.toISOString() ) 。
uj5u.com熱心網友回復:
你可以通過使用輔助函式createDateObj將字串轉換成日期物件來得到想要的結果。
然后使用過濾器,得到的結果是
return arr.filter((o) => /span> {
const date = new Date(o.cdate)。
return date - start > 0 && end - start > 0。
})
。
var sdate = "11-5-2020";
var edate = "20-2-2021";
function createDateObj(str){
const [a, b, c] = str.split("-"/span>)。
return `${b}-${a}-${c}`。
}
function getdate(arr) {
const start = new Date(createDateObj(sdate)) 。
const end = new Date(createDateObj(edate)) 。
return arr.filter((o) => {
const date = new Date(o.cdate)。
return date - start > 0 && end - start > 0。
});
}
var obj = {
orders: [
{ id: 1, mode: "xyz", orderid: 123, cdate: "2017-2-13 07:33:30" }。
{ id: 2, mode: "abc", orderid: 456, cdate: "2018-4-20 06:10:30" },
{ id: 3, mode: "xyz", orderid: 768, cdate: "2020-8-10 08:00:00" },
],
};
console.log(getdate(obj.orders) ;
<iframe name="sif4" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327362.html
標籤:
上一篇:是的,重復程式/否,退出
