我有一系列 json 对象,每个对象都包含特定用户发生事件的时间戳。JSON 对象presence
可以是active
或away
。
我需要找到active
特定日期的最早时间,然后找到away
在此时间之后出现的第一个事件,丢弃这两次之间的“活动”(或离开)事件,并使用它来创建开始和结束时间那个特定的时间范围。然后我需要继续这样做,直到我拥有一天的所有时间范围。返回的 json 应该是包含当天所有开始(活动)和结束(离开)时间的对象列表。
所以有了这些数据:
[
{
"id": "U018ZG0EPK5",
"presence": "away",
"timestamp": "2021-05-27T08:05:55.998Z",
"_id": "378c61eb7c964377be66d8653bc96060"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T15:07:28.222Z",
"_id": "852fe2a64dc948a481b0f416fee627fb"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T15:46:43.319Z",
"_id": "4b986df1d71a42c99ee5b153fe2e45ea"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T16:25:00.008Z",
"_id": "bbd6c72501b545e8ac0559b23d3b00fa"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T16:31:02.096Z",
"_id": "6f4e633d8f024752a2f36bdb2ca9b42b"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T16:32:37.401Z",
"_id": "dfa333d71fd34a57964aa89c1c8ab23c"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T16:32:47.237Z",
"_id": "9723e47ae6544795bc1a6b99a7df11de"
},
{
"id": "U018ZG0EPK5",
"presence": "away",
"timestamp": "2021-05-27T16:34:14.174Z",
"_id": "3476ebc918404867823c5802638a6de8"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T16:34:27.108Z",
"_id": "5303930cdfe84e8f87099a0300757762"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T16:34:41.174Z",
"_id": "c41623fa795444799de56508bc1e3b76"
},
{
"id": "U018ZG0EPK5",
"presence": "active",
"timestamp": "2021-05-27T16:34:49.938Z",
"_id": "0aa6bd90ad0c447383da1b033e8566bf"
}
]
我想要一个输出
[{
id: ...,
start: 'May 27, 2021 3:07:28 pm',
end: 'May 27, 2021 4:34:14 pm'
},
{
id: ...,
start: 'May 27, 2021 4:34:27 pm'
end: 'present'
}]
这是我到目前为止所拥有的,但需要一些关于如何按照我需要的方式过滤的指导。有没有一种算法可以让我查找这种情况?
//Had to shrink timestamp log to post this
var timelogs = [
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-26T23:33:09.614Z",
"_id":"468ebb4ada204c3d82fb19ec5807d1a4"
},
{
"id":"U01BZ4L5XUL",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.616Z",
"_id":"ed1f733b81bb4dea9d7832c657f9af39"
},
{
"id":"U01T9AUA406",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.617Z",
"_id":"5d085f256b4446aea6c08a8de6a85848"
},
{
"id":"UAPC6K6EQ",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.618Z",
"_id":"0ddd373bcb164958ae5769473d86088f"
},
{
"id":"U01NHH1NAFR",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.619Z",
"_id":"518f4f0bf9fc449f8f9445f81839662d"
},
{
"id":"U020N0PVA4V",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.620Z",
"_id":"2d9850a419ec429fa47a24104df041a3"
},
{
"id":"U0219B9DYKH",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.621Z",
"_id":"3cd4c7c2dbaf499c966cd9cc0c1e57c4"
},
{
"id":"U018ZG0EPK5",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.622Z",
"_id":"fc912f40ce0441ab8d60c34ac210667f"
},
{
"id":"U0222NP4C9F",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.623Z",
"_id":"52326de9421845cfb5067731d97f6913"
},
{
"id":"U01U3QTP6BF",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.624Z",
"_id":"5b38225d616845b8986898b202029499"
},
{
"id":"UAPPU006M",
"presence":"away",
"timestamp":"2021-05-26T23:33:09.625Z",
"_id":"540b7fb2fe13433abba868a8b54e0f91"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-26T23:42:59.389Z",
"_id":"4bb22e409605419e9ec260f12fde52e0"
},
{
"id":"U01BZ4L5XUL",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.391Z",
"_id":"ed595f05acb74d9eb9b5c89b05201697"
},
{
"id":"U01T9AUA406",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.392Z",
"_id":"0790ee2165864101b86347de02357fb0"
},
{
"id":"UAPC6K6EQ",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.393Z",
"_id":"1a50d455f15e4050bedc49ff6dd2189d"
},
{
"id":"U01NHH1NAFR",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.394Z",
"_id":"00ad362a3b554a8c9a81c8cdafadba6a"
},
{
"id":"U020N0PVA4V",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.395Z",
"_id":"0c7a6dbe824d484b89266092aabf20c8"
},
{
"id":"U0219B9DYKH",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.396Z",
"_id":"9cbd3ab509f7421c9a2ef4c52db8cc36"
},
{
"id":"U018ZG0EPK5",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.397Z",
"_id":"982a088c4fb7407a945cf6da14de35ed"
},
{
"id":"U0222NP4C9F",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.397Z",
"_id":"7551d3bf6a014a07995e9da25e578095"
},
{
"id":"U01U3QTP6BF",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.398Z",
"_id":"886554626c894a92a065d8692c4bb044"
},
{
"id":"UAPPU006M",
"presence":"away",
"timestamp":"2021-05-26T23:42:59.400Z",
"_id":"3ff4ba5bcd0f45298740066e640aeb89"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-26T23:43:53.656Z",
"_id":"dfb3e6031b364b5ca7653873f3f71405"
},
{
"id":"U01BZ4L5XUL",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.659Z",
"_id":"159ef382e8e448fa92cc792b2111afa9"
},
{
"id":"U01T9AUA406",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.661Z",
"_id":"1aba4e320e7b4fe695ae6277b1a2b529"
},
{
"id":"U01NHH1NAFR",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.662Z",
"_id":"38fe988b2c2343d0bc565d9bb55bdff5"
},
{
"id":"UAPC6K6EQ",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.663Z",
"_id":"85b112d89c9b4f0986b5ada1b6036217"
},
{
"id":"U0219B9DYKH",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.664Z",
"_id":"af5e866bca1e49bd9ca509fe5095005c"
},
{
"id":"U020N0PVA4V",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.665Z",
"_id":"cb5c1b1b3ba347b78e53bbd5c63640ab"
},
{
"id":"U0222NP4C9F",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.666Z",
"_id":"fdcdb6e00f1f4dab9431aead5b91f20d"
},
{
"id":"U018ZG0EPK5",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.667Z",
"_id":"9d1fb7d57c984974b4f3588a2e0123da"
},
{
"id":"U01U3QTP6BF",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.668Z",
"_id":"c0ea440664f84a88a44d57c1ec4d0e45"
},
{
"id":"UAPPU006M",
"presence":"away",
"timestamp":"2021-05-26T23:43:53.669Z",
"_id":"d32289d332174543b6d46e5ee8be9439"
},
{
"id":"UAPC6K6EQ",
"presence":"active",
"timestamp":"2021-05-27T00:25:15.958Z",
"_id":"a1e150e1aadb445c96dd7cd4b60d7bd3"
},
{
"id":"UAP25QG0Z",
"presence":"away",
"timestamp":"2021-05-27T00:35:55.748Z",
"_id":"6de94899ee6941d0ac07198192b7ecc5"
},
{
"id":"UAPC6K6EQ",
"presence":"away",
"timestamp":"2021-05-27T01:00:33.508Z",
"_id":"58044d9656054d859923e0c561ab4ecd"
},
{
"id":"UAPC6K6EQ",
"presence":"active",
"timestamp":"2021-05-27T01:05:44.047Z",
"_id":"cc4ceb0986934b60a4550e4ae1cb6b8b"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-27T01:40:36.044Z",
"_id":"14c1ed5133934ac59b66ac69b67adabc"
},
{
"id":"UAP25QG0Z",
"presence":"away",
"timestamp":"2021-05-27T01:42:00.118Z",
"_id":"c92c54979fb94f6cb66ce302033c661a"
},
{
"id":"UAP25QG0Z",
"presence":"away",
"timestamp":"2021-05-27T01:46:13.391Z",
"_id":"74a569a6b48e434f8bb940296acce969"
},
{
"id":"UAPPU006M",
"presence":"active",
"timestamp":"2021-05-27T01:48:25.511Z",
"_id":"00945f5d7777456badeaf1df09eb2a1c"
},
{
"id":"UAPPU006M",
"presence":"away",
"timestamp":"2021-05-27T02:18:46.380Z",
"_id":"0f5225ca5f2944a5a7f783b6b6717355"
},
{
"id":"U0219B9DYKH",
"presence":"active",
"timestamp":"2021-05-27T03:17:50.476Z",
"_id":"33647bc0a0f147b1a6e46a06ab748f0c"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-27T03:35:18.282Z",
"_id":"7609c75aa9634151b9e1d37b997ff14f"
},
{
"id":"UAP25QG0Z",
"presence":"away",
"timestamp":"2021-05-27T03:35:55.309Z",
"_id":"91fe6b3a42da4e70b7842f35d939a7dc"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-27T03:39:42.635Z",
"_id":"2b4e4b1b79a9432b842594c232499e0f"
},
{
"id":"UAP25QG0Z",
"presence":"away",
"timestamp":"2021-05-27T03:40:06.674Z",
"_id":"bfd84db490f6443db95e5919a7fbefb0"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-27T03:52:40.161Z",
"_id":"578d7c81792548269e171384fd7c1a38"
},
{
"id":"UAP25QG0Z",
"presence":"away",
"timestamp":"2021-05-27T03:53:03.200Z",
"_id":"d030c48923604066a8d2ee58289b77a0"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-27T03:53:04.129Z",
"_id":"afd4b4cdd8844e90b44d44e6577fb39c"
},
{
"id":"UAP25QG0Z",
"presence":"away",
"timestamp":"2021-05-27T03:53:44.204Z",
"_id":"ef60766efaff41198c5a4d47a1e6521e"
},
{
"id":"U0219B9DYKH",
"presence":"away",
"timestamp":"2021-05-27T04:02:57.514Z",
"_id":"3ea0c22e6f90425fa627ec524ca92e15"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-27T04:21:14.262Z",
"_id":"088cc45f06ce4ad082bd92b8859dac65"
},
{
"id":"UAP25QG0Z",
"presence":"away",
"timestamp":"2021-05-27T04:21:16.302Z",
"_id":"b7b733ee67ca4704897326980007e171"
},
{
"id":"UAPPU006M",
"presence":"active",
"timestamp":"2021-05-27T06:28:26.887Z",
"_id":"210728c8348742bc816e240054aa6866"
},
{
"id":"UAPPU006M",
"presence":"away",
"timestamp":"2021-05-27T06:35:00.018Z",
"_id":"b12f6a4b49e048a29669d66c1e0cc0a4"
},
{
"id":"UAPC6K6EQ",
"presence":"away",
"timestamp":"2021-05-27T06:36:00.119Z",
"_id":"af6b9969824a49f5b995107236e7d2ee"
},
{
"id":"UAP25QG0Z",
"presence":"active",
"timestamp":"2021-05-27T07:54:40.892Z",
"_id":"347abf356cf144fba448edf63b07df5b"
},
{
"id":"U01BZ4L5XUL",
"presence":"away",
"timestamp":"2021-05-27T08:05:55.986Z",
"_id":"23ae57caa3a44f749c4e0bcd7943ecb1"
},
{
"id":"U01T9AUA406",
"presence":"away",
"timestamp":"2021-05-27T08:05:55.989Z",
"_id":"313bd441b80e459ab7023315b0193b52"
},
{
"id":"U01NHH1NAFR",
"presence":"away",
"timestamp":"2021-05-27T08:05:55.991Z",
"_id":"9a2ceaf0ee36461b8c15bc6afa2ba7bc"
},
{
"id":"UAPC6K6EQ",
"presence":"away",
"timestamp":"2021-05-27T08:05:55.992Z",
"_id":"3a7945e4ffa14f66a88cdb881b9d1846"
},
{
"id":"U020N0PVA4V",
"presence":"away",
"timestamp":"2021-05-27T08:05:55.993Z",
"_id":"a2520c4f3b40455e9d2d41874ffb72b4"
}]
console.log(timelogs);
let userid = "U018ZG0EPK5";
let day = dayjs();
console.log(day);
let test = day.subtract(1, "day");
console.log(test);
let userDateTimelogs = timelogs.filter((timelog) => {
let isUser = timelog.id === userid
let isDay = day.isSame(timelog.timestamp, "day");
return isDay && isUser;
});
let sortedUserTimelogs = userDateTimelogs.sort((a, b) => {
return a.timestamp - b.timestamp;
});
console.log(sortedUserTimelogs);
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/BrowserFS/2.0.0/browserfs.min.js" integrity="sha512-mz0EI+Ay1uIJP7rZEX8C/JlTAcHRIQ8Sny4vxmmj8MSzDJgG9NxxY2pUmOGv1lO7imFIFMyjjCzEXEywNgaUdQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.10.5/dayjs.min.js" integrity="sha512-n6mJ6AqoohFfbgx3x7N162B/zRNs5x8uvsStlHC+LCvqwKW7oiucE07Ehatg62ybx6Vo1ctaZwm/4sSRUTSIQA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="./script.js"></script>
</head>
<body>
</body>
</html>