【问题标题】:How to get raw date string from date picker?如何从日期选择器获取原始日期字符串?
【发布时间】:2022-01-12 10:55:45
【问题描述】:

我在这个看似微不足道的问题上苦苦挣扎了好几个小时。

我的页面上有一个antd 日期选择器。

每当我选择一个日期时,它不会给我我选择的日期,而是给我一个凌乱的时刻对象,我无法弄清楚如何阅读。

我想要的是,当我选择“2020-01-18”时,它应该准确地给我用户选择的这个字符串,无论时区如何,最好是 ISO 格式。

这不是一个跨国网站。我只需要一个普通的日期,这样我就可以将它发送到服务器,存储在数据库中,等等。

这是我的一些试验,到目前为止还没有运气:

var fltval = e;
if (isMoment(fltval)) {
  var dat = fltval.toDate();
  //dat.setUTCHours(0)
  fltval = dat.toISOString(); // fltval.toISOString(false)

  var a = dat.toUTCString();
  //var b = dat.toLocaleString()
}

它会持续移动几个小时,可能是为了补偿一些时区偏差

更新 1:

datestring 在数据方面是正确的。但它不是 ISO,所以我不能正确使用它。我可能会尝试解析它,但我找不到将字符串解析为具有特定格式的日期的方法。

更新 2:

我也尝试手动添加偏差,但由于某种原因偏差为 0

var dat = pickerval.toDate()
var bias = Date.prototype.getTimezoneOffset()// this is 0...
var bias2 = dat.getTimezoneOffset()// and this too is 0
var d2 = new Date(dat.getTime()+bias)
var mystring= dat.toISOString() //still wrong

谢谢!

【问题讨论】:

  • <DatePicker onChange={(date,dateString)=>{ console.log(dateString) }} /> 是 dateString 你在找什么?
  • 嗨。谢谢。我添加了一个更新。日期是正确的。但它不可用。

标签: reactjs date antd iso


【解决方案1】:

获取日期字符串有两种方式:

  1. 使用 moment.format api: date.format("yyyy-MM-DD")
  2. 使用传递给 onChange 的日期字符串作为第二个参数

这是Link

【讨论】:

  • 嗨。谢谢。 date.format 犯了同样的错误。我尝试了fltval.format("yyyy-MM-DDTHH:mm:ss") 并返回了“2021-08-02T22:00:00”。即使我选择了 8 月 3 日。请告知。
  • 你能把它放在沙箱里吗,你的代码。就像它是错误的日期一样。
  • 我不确定你所说的沙盒是什么意思。但我选择“2021 年 8 月 3 日”。那么它为什么给我“2021-08-02T22:00:00”?抵消了-2小时。 (这恰好是我的浏览器本地时区偏差,但我根本不在乎 tz 偏差)
  • 时刻对象将始终为当地时间。这是正确的,因为那是他们选择的那一天。您可以通过访问 UTC 偏移量并将其添加到时刻日期来克服它,或者创建一个新的 momet UTC 对象,然后从所选日期开始填写年、月和日,然后将其转换为 UTC 以获取所选日期。
  • 谢谢。听起来是一个好主意。但由于某种原因,我的偏见显示为 0。请参阅我帖子中的更新 2。谢谢!
【解决方案2】:

我假设您的代码 sn-p 在 onChange 方法中。这为您提供了一个时刻和一个日期字符串(分别是函数的第一个和第二个参数)。

您有几个选择。您可以在 DatePicker 上设置 format 属性以匹配所需字符串的格式。然后只需使用日期字符串。或者您可以使用 Domino987 描述的 moment 对象。

【讨论】:

    【解决方案3】:

    可以使用Javascript日期函数,

    我假设您将使用 2022-01-03T11:19:07.946Z 格式

    date.toISOString().slice(0, 10)
    

    至 2022-01-03

    【讨论】:

    • 嗨。谢谢。由于偏差是负面的。日期本身有时也是错误的。即如果我选择 2020-10-10 00:00:00,那么选择器会将其移动到 2020-10-09 23:00:00 :-(
    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多