将正确的值传递给 moment.js `toDate() 函数`

Passing correct value to moment.js `toDate() function`

在我的 react-native 应用程序的 timepicker 组件中,我需要将一个值传递给 moment 的 toDate() 函数,因为这是组件需要的格式。

我的值是一个时钟值,以字符串形式出现,例如“14:23”。

我的问题是,我如何获取该时钟字符串值,将其附加到日期,然后将其格式化为我可以将其全部作为 val 的值传递的方式传入这里:

 this.value = moment(val).toDate();

我试过这个:

const val = "14:24"

const m = moment(`2022-02-19:${val}`);
console.log('isValid: ', m.isValid()); // false

但这失败了。

但是,就此而言,也是如此:

const m = moment("2011-10-10T10:20:90");
console.log('isValid: ', m.isValid()); // false

所以我想这并不奇怪,并且表明这里有一些我不理解的地方。最重要的是,我如何格式化一个值,使用像“14:24”这样的字符串值,然后将它传递给 moment 的 toDate() 函数?

  this.value = moment(val).toDate();

Moment 有一个格式化程序,可以格式化然后将此字符串解析为 JavaScript 日期。您当前使用的格式不是标准的 ISO8601 格式 YYYY-MM-DDTHH:mm:ssZ,因此 moment 本身不支持它,因为您在日后使用的是 : 符号,而不是字母“T”。

您可以像这样更改代码轻松获得所需的效果:

const m = moment(`2022-02-19T${val}`);

或者,您可以更改 moments defaultFormatter 以支持您想要的任何格式。为此,您可以像这样简单地调用它:

moment.defaultFormat = "YYYY-MM-DD:HH:mm"

或者像这样简单地将格式化程序与日期字符串一起显式传递给 moment:

const m = moment(`2022-02-19:${val}`, "YYYY-MM-DD:HH:mm").toDate()