reactjs 如何在react native中使用时间戳对数组排序而不影响时区

wko9yo5t  于 2022-12-18  发布在  React
关注(0)|答案(2)|浏览(109)

我需要在不影响时间戳的情况下在react native中对一个数组进行排序。我正在从后端获取带有时间戳的详细信息,我想对它进行排序。我已经使用下面的代码按照先到先的原则完成了排序部分。

const members = out.game.gameMembers.map((elem) => {
      return {
        id: elem.userId._id,
        profileImage: elem.userId.profileImage,
        name: elem.userId.name,
        status: elem.status,
        position: elem.userId.position,
        isDeleted: elem.userId.isDeleted,
        createdAt: elem.createdAt,
        updatedAt:elem.updatedAt
      };
    });
    
    

    let sortedMembers = members.sort(function (x, y) {
      // return x.updatedAt - y.updatedAt;
     return new Date(x.updatedAt) - new Date(y.updatedAt);
    });

这里我得到了排序后的成员,并根据他们的时间戳进行排序。但问题是时区。如果用户'A'来自迪拜,另一个用户'B'来自印度,时差大约是两个半小时。
例如,来自印度的用户在上午11:30更新了他们的配置文件状态,10分钟后,来自迪拜的用户更新了他的状态,时间是上午10:00。所以在排序时,来自迪拜的用户排在第一位,这是不可能发生的。如何准确地解决这个问题,并使用时间戳排序的细节先来先到的基础上。此外,我得到了迪拜用户和印度用户的时区。谢谢

kx1ctssn

kx1ctssn1#

始终将UTC日期存储在数据库中,并在应用程序中使用时将其转换为本地日期,这样您将有更多的自定义权限
ISO最适合存储在数据库中
ISO格式示例:'2022-12-15T06:22:10.299Z'
如何获取ISO格式的日期?

new Date().toISOString()

然后把它们分类
ISO8601 See General principles 是为字典排序而设计的。因此,ISO8601字符串表示可以像任何其他字符串一样排序,这将给予预期的顺序。

'2007-01-17T08:00:00Z' < '2008-01-17T08:00:00Z' === true

因此,您将实施:

var myArray = [
    { name:'oldest', date:'2007-01-17T08:00:00Z' },
    { name:'newest', date:'2011-01-28T08:00:00Z' },
    { name:'old',    date:'2009-11-25T08:00:00Z' }
];

myArray.sort(function(a, b) {
    return (a.date < b.date) ? -1 : ((a.date > b.date) ? 1 : 0);
});

ndh0cuux

ndh0cuux2#

转换为UTC时区应起作用:

const date = new Date()

//本地时区的日期

console.log(date.toString())

//UTC时区中的日期

console.log(date.toUTCString())

相关问题