Установить часовой пояс React-Datepicker

Я использую реагирующее средство выбора даты, чтобы позволить пользователю выбрать дату. Тем не менее, сейчас он использует местное время (PDT), но я хочу жестко закодировать его, чтобы использовать определенный часовой пояс (PST).

Я попытался использовать utcOffset prop, но, похоже, он ничего не делает. Кто-нибудь знает, как этого добиться?

Ответы

Ответ 1

Я прошел через это. Если вы решили, что хотите просто игнорировать локальное смещение, вы можете жестко закодировать зону. Наблюдение просто для того, чтобы дать полный ответ: PST всегда будет -08: 00, но если вы хотите, например, тихоокеанское время, сейчас это -07: 00, в этом случае вы можете захотеть установите 'moment.timezone', затем import moment from 'moment-timezone' и просто получите текущее смещение с помощью moment.tz('US/Pacific').format('Z')

Код в машинописи (я могу изменить его на Javascript, если хотите):

interface ICalendarInputProps {
  handleChange: (newDate: moment.Moment) => void;
}

const CalendarInput = ({ handleChange }: ICalendarInputProps) => {
  const onChange = (date: Date) => {
    handleChange(moment('${moment(date).format('YYYY-MM-DDThh:mm:ss')}-08:00'));
    // This is to get the offset from a timezone: handleChange(moment('${moment(date).format('YYYY-MM-DDThh:mm:ss')}${moment.tz('US/Pacific').format('Z')}'));
  };

  return (<DatePicker onChange={onChange} />);
};

export default CalendarInput;

Ответ 2

Мне также не повезло с utcOffset. Вы можете использовать moment-timezone в своем проекте вместо moment и конвертировать его самостоятельно:

import moment from "moment-timezone";

onDateChange = date => {
  console.log("as is:", date.format("YYYY-MM-DD HH:mm:ss"));
  console.log("PST:", moment(date).tz("America/Los_Angeles").format("YYYY-MM-DD HH:mm:ss"));
};

Песочница: https://codesandbox.io/s/y2vwj9mwpz

Ответ 3

Так как вы используете moment.js, вы можете попробовать использовать moment.utc() и вычесть часы в часовой пояс pst.

moment.utc().startOf('day').subtract(8, 'hours')