当前位置: 首页 > 知识库问答 >
问题:

设置时区反应日期选择器

孙成化
2023-03-14

我使用react datepicker让用户选择一个日期。然而,现在它使用本地时间(PDT),但我想将其硬编码为使用特定时区(PST)。

我尝试使用utcOffsetprop,但它似乎没有任何作用。有人知道如何做到这一点吗?

共有3个答案

夏侯旻
2023-03-14

因为datepicker不再使用moment.js了,所以我试图为这个问题实现一个hacky解决方案,假设初始值是一个字符串,例如:

export const formatUTC = (dateInt, addOffset = false) => {
    let date = (!dateInt || dateInt.length < 1) ? new Date : new Date(dateInt);
    if (typeof dateInt === "string") {
        return date;
    } else {
        const offset = addOffset ? date.getTimezoneOffset() : -(date.getTimezoneOffset());
        const offsetDate = new Date();
        offsetDate.setTime(date.getTime() + offset * 60000)
        return offsetDate;
    }
}

在日期内,我这样调用格式化程序:

selected={formatUTC(this.props.input.value,true)}
                    onChange={date => formatUTC(date)}
姚钊
2023-03-14

这对我很有用:

import React, { ComponentProps } from "react"
import DatePicker from "react-datepicker"
import moment from "moment"

interface Props {
  timezone: string
}

const DatePickerWithTimezone = ({
  selected,
  onChange,
  timezone,
  ...props
}: Props & ComponentProps<typeof DatePicker>) => (
  <DatePicker
    selected={selected ? setLocalZone(selected, timezone) : null}
    onChange={(v, e) => {
      onChange(v ? setOtherZone(v, timezone) : null, e)
    }}
    {...props}
  />
)

const setLocalZone = (date: Date, timezone: string) => {
  const dateWithoutZone = moment
    .tz(date, timezone)
    .format("YYYY-MM-DDTHH:mm:ss.SSS")
  const localZone = moment(dateWithoutZone).format("Z")
  const dateWithLocalZone = [dateWithoutZone, localZone].join("")

  return new Date(dateWithLocalZone)
}

const setOtherZone = (date: Date, timezone: string) => {
  const dateWithoutZone = moment(date).format("YYYY-MM-DDTHH:mm:ss.SSS")
  const otherZone = moment.tz(date, timezone).format("Z")
  const dateWithOtherZone = [dateWithoutZone, otherZone].join("")

  return new Date(dateWithOtherZone)
}

export default DatePickerWithTimezone
高弘光
2023-03-14

就我而言,我在呈现React dates插件之前设置了defaultTimezone。反应日期将只使用默认时区。

moment.tz.setDefault('America/Los_Angeles');
 类似资料:
  • 我正在我的应用程序中使用此库: https://reactdatepicker.com/ 我可以使用一个excludeDates道具,在这里我可以传递一个日期列表,也就是不包括今天和昨天的日期: 我希望有一个更好的方法,而不是将数百个日期传递到该数组中。 谢谢

  • 我有一个react表单,其中我使用react datepicker,当我尝试填充来自数据库的date字段的值时,我得到错误invalid time值。 我尝试过几种时间格式,但都无济于事。下面是我的解决方案。 所选道具中发布日期的值为 问题似乎与日期格式有关,但我不知道所选内容是否可以接受。请让met知道我的问题是否足够清楚。

  • 日期时间选择器是一个定制的picker,因此他的用法和picker完全一致。打开picker的默认值是当前时间,可以通过value参数指定 datetime-picker 定制了 onChange 和 cols 参数,请不要设置这两个参数。 <input type="text" id='datetime-picker'/> <script>   $("#datetime-picker").da

  • 我怎样才能使一个字母出现在日历上,而不是两个,例如MO我想成为M。我已经尝试过使用周末短,使三个字母"MON",有人知道如何使"M"

  • 问题内容: 我正在尝试制作类似提醒的应用程序。我想允许用户选择不是现在(至少从现在起5分钟)的日期和时间,并且我也想禁止用户选择距离太远的日期- 例如30天。我创建了datePicker和timePicker,使它们在单击按钮时弹出,但是找不到设置最小值和最大值的方法。 问题答案: 试试这个: 但是,您需要检查用户是否选择了今天的日期,并且时间是否小于当前时间条件。

  • 我想在日期时间选择器中选择大于开始日期的结束日期时间。 当前,我正在开始日期时间和结束日期时间。 假设,我选择了时间为12:00 pm的当前日期,现在end date应该是时间为1:00 pm的当前日期。 我想要下面这样的东西 示例 开始日期和时间:---2019-11-06 12:00结束日期和时间:---2019-11-06 1:00 这是我的代码 null null