【问题标题】:Can I use Luxon to combine a DateTime with a time string?我可以使用 Luxon 将 DateTime 与时间字符串结合起来吗?
【发布时间】:2021-07-02 16:34:30
【问题描述】:

我有一个 TimePicker 组件,它以这种格式返回 24 小时制:09:00 表示上午 9 点,12:00 表示下午 12 点,20:00 表示晚上 8 点。我的代码中的某些内容需要Date (JSDate),因此我只想获取当前日期/时间DateTime.now(),但应用具有onClick 事件的TimePicker 组件中的小时和分钟。我可以像这样处理那个事件:

// TimePickerValue can either be a string or JSDate
// but the TimePicker is always returning a string
const handleTimeChange = (time:TimePickerValue) => {
  // this outputs a time in 24-hour format
  console.log("handleTimeChange: ", time) 
    
  // I want to set the state of the parent component
  // this needs to be in JSDate format so this doesn't work
  // setSomeValue(time)

  // Because I don't care about date, I can just use "now()" and convert
  // it to a JSDate but I want the hours and minutes of the value I'm setting
  // to be the time in the string being sent to this function.
  setSomeValue(DateTime.now().toJSDate())
}

Luxon 能否解析“13:00”之类的内容或将其应用于现有的DateTime,以便覆盖现有的hoursminutes

【问题讨论】:

    标签: javascript reactjs typescript luxon


    【解决方案1】:

    Luxon 可以解析类似“13:00”的内容

    是的,you can just use the fromISO method to parse a time string

    const parsed = DateTime.fromISO('20:00');
    console.log(parsed.toString());  // 2021-04-07T20:00:00.000+10:00
    

    Luxon 能否将它应用到现有的 DateTime 以便覆盖现有的小时和分钟?

    这可能有点困难,我不知道 Luxon 中是否有“内置”方法可以做到这一点。但是,如果您使用fromISO 解析时间字符串,它会将日期部分设置为“今天”,因此您可以使用diff 来计算“一天中的时间”(作为Duration)然后使用将时间设置在其他日期:

    const parsed = DateTime.fromISO(time);
    const today = DateTime.now().startOf('day');
    const timeOfDay = parsed.diff(today);
    
    const dateToModify = DateTime.fromJSDate(otherDate);
    const result = dateToModify.startOf('day').plus(timeOfDay);
    

    或者,如果您有时间的“部分”,您可以使用Luxon's set method 覆盖那些单独的部分:

    const dateToModify = DateTime.fromJSDate(otherDate);
    
    // Not sure what's in the 'TimePickerValue' object but if you had hours and minutes:
    const result = dateToModify.set({
        hours: time.hours,
        minutes: time.minutes,
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      相关资源
      最近更新 更多