我正在使用 PrimeReact DataTable,并尝试过滤日期列。我正在使用 PrimeReact 的内置 UI,但在设置过滤器后正在执行自定义操作。这一切都工作正常,除了我在过滤日期列后返回了错误的数据。
在 UI 中,我将“日期是”过滤器设置为 2013 年 9 月 11 日(比如说)。这恰好是我正在使用的一个例子。甚至连时区的暗示都没有。但是当我调试代码时,我看到的是“Wed Sep 11 2013 00:00:00 GMT+0100(英国夏令时间)”。 PrimeReact 添加了时区。我想它已经完成了,但这给我带来了问题,因为应用程序中的其他所有内容都是 UTC。
我希望能够将其关闭。我只是想通过这个日期。如果有必要的话,也许只是截断,但我想知道,有人知道如何做到这一点,也许只是设置一些东西吗?
我不知道primereact的细节,但据我了解,JS中的日期总是与时区相关联,当你创建一个日期时,用
new Date()
说,创建的对象有一个与之相关的UTC偏移量并调用日期上的 getTimezoneOffset
函数返回以分钟为单位的偏移量。
因此,大多数过滤系统您可能会操作表示日期/日期时间数据组成部分的字符串元素。在某些时候,这些元素需要被解析为日期,并且使用 JS,这会将日期值与浏览器可用的区域设置(或类似的东西)结合起来。
所以一般来说,由于 JS 不支持“原始”日期/日期时间对象,您可以通过直接在 UTC 时区中构建日期对象来近似/复制此行为,即:UTC 偏移量 = 0。也可能有用于此目的的库但一般来说你可以做到
new Date(Date.UTC(<year>,<month>,<day>, <[... optional_time_components]))
。那么您已经将字符串解析为 UTC 日期对象。请记住,月份索引为 0,因此如果您有“2024-01-01”,则应该构建 .UTC(2024,0,1)
。不过,日(称为日期)的索引为 1。
因此,在您的情况下,您可能希望在 prime React 中注册一个自定义过滤器,您可以在其中获取字符串形式的值,并将其解析为 UTC 日期,然后对那里的日期执行操作。 https://primereact.org/datatable/#custom_filter