0

我有一系列 json 对象,每个对象都包含特定用户发生事件的时间戳。JSON 对象presence可以是activeaway

我需要找到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>
4

0 回答 0