0

到目前为止,我用于moment-js时间处理,但我想切换到Luxon. 但是我对以下实现有疑问。

有一个文本字段,您可以在其中以您的语言环境时间格式输入日期时间,例如HH:mm(24 小时格式)或hh:mm(12 小时格式)。使用的时间格式存储在变量中timeFormat

我的解决方案moment-js

let timeFormat = 'HH:mm' // 'hh:mm a'
let textfield = document.querySelector('#input-time');
let timeString = textfield.value;
let dateTime = moment(timeString, timeFormat, true);

// Check if time is valid
if(dateTime.isValid() === false){
    return;
}

使用 12 小时格式:

  • 11:00 am,有效09:43 pm_
  • 11:00,无效21:43_

使用 24 小时制:

  • 11:00 am,无效09:43 pm_
  • 11:00,有效21:43_

我怎样才能获得类似的解决方案Luxon?我最大的问题是获得与 类似的功能moment(timeString, timeFormat, true),因此使用特定格式将字符串格式化为日期时间,例如 12h/24 格式。

4

1 回答 1

2

你可以使用fromFormat方法

从输入字符串和格式字符串创建 DateTime。如果未指定区域设置,则默认为 en-US,无论系统的区域设置如何。

例子:

const DateTime = luxon.DateTime;
const inputs = ['11:00 am', '09:43 pm', '11:00', '21:43'];
const formats = ['HH:mm', 'hh:mm a'];

const checkTime = (timeString, fmt) => 
  DateTime.fromFormat(timeString, fmt).isValid


for (i=0; i<inputs.length; i++) {
  for (j=0; j<formats.length; j++) {
    console.log(`${inputs[i]} with format '${formats[j]}' is valid? ` + checkTime(inputs[i], formats[j]) );
  }
}
<script src="https://cdn.jsdelivr.net/npm/luxon@1.25.0/build/global/luxon.js"></script>

查看手册的For Moment users部分以获得从 momentjs 迁移到 Luxon 的良好参考。

于 2020-11-02T15:32:55.510 回答