微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以使用 Luxon 将 DateTime 与时间字符串结合起来吗?

如何解决我可以使用 Luxon 将 DateTime 与时间字符串结合起来吗?

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

onClick

Luxon 能否解析诸如“13:00”之类的内容或将其应用于现有的 // 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()) } 以覆盖其现有的 DateTimehours

解决方法

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 计算出“一天中的时间”(作为 {{1 }}) 然后用它来设置另一个日期的时间:

Duration

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

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。