【问题标题】:time is changing while we use react-datepicker当我们使用 react-datepicker 时,时间正在改变
【发布时间】:2020-07-16 06:35:07
【问题描述】:

我在 datepicker 中选择了 12:00 Pm 并且我还在控制台记录它....它显示 Thu Jul 09 2020 12:00:00 GMT+0530(印度标准时间),这是正确的时间。 但是当我点击保存时,它会发送错误的时间(2020-07-09T06:30:00.454Z)。 它比用户选择的时间少了 5 个半小时。 它应该发送 (2020-07-09T012:00:00.454Z)----预期行为 我不知道是什么问题以及如何解决这个问题 我的代码

 <DatePicker
        selected={new Date(value)}
        onChange={(e) => setFieldValue(field.name, e)}
        className={classes.datePicker}
        todayButton="Today"
        {...rest}
      />

我需要传递用户选择的完全相同的时间。 我认为这个问题是由于时区或 UTC 等而发生的。所以请帮忙

【问题讨论】:

  • 这是正确的行为。理想情况下,日期和时间应存储为 UTC 格式。您可以在显示时使用toLocale* 方法将UTC 转换为用户的时区。
  • @MjZac 显示实际上不是问题,但是在将错误的时间存储在数据库中时,就像用户选择了 12:00 PM 所以它应该存储 12:00 pm 而不是 6:30 AM。
  • @MjZac 我过去只坚持服务器时间

标签: reactjs momentjs react-datepicker


【解决方案1】:

这是 javascript 的常见问题。我通常会在将代码发送到后端之前编写一个“修复时区偏移”函数并调用此函数:

export const fixTimezoneOffset = (date: Date) : string => {
  if(!date) return "";
  return new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toJSON();
}

你这样称呼它:fixTimezoneOffset(my_date)

免责声明:fixTimezoneOffset 返回一个字符串,该字符串将自动计算到后端的日期时间对象中。只调用一次fixTimezoneOffset,而不是多次调用!!

【讨论】:

  • 我使用了 fixTimezoneOffset 函数,但它总是将时间返回为 00:00:00(2020-07-16T00:00:00.000Z) 例如 2020 年 7 月 16 日星期四 14:00:00 GMT+0530(印度标准时间)转换为 2020-07-16T00:00:00.000Z
  • @Bipin 抱歉,我发布了错误的代码。如果我希望时间始终为 00:00,我会使用这段代码。我更新了 sn-p(而不是使用 date.getfullyear、getfullmonth、getdate,我只是得到了日期的完整时间)。试试看,告诉我它是如何工作的
  • 现在我在显示从后端 api 返回的 1970-01-01T14:00:00.000+0000 之类的值时遇到问题,但现在它显示 19:30 我通过下面的函数格式化日期以显示它导出函数 formatTime (日期) { 常量时间 = 新日期(日期);返回 time.getHours() + ":" + time.getMinutes(); }
  • 在 React 应用中显示来自后端的日期时,不应使用“fixTimezoneOffset”函数。
  • 我认为会有解决方案
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 2020-07-15
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2019-10-17
相关资源
最近更新 更多