我正在try 解析"13/12/2023""13/12/2023 10:00:00 AM"个日期字符串,以使用JavaScript创建日期对象.据我所知,它不能通过new Date('13/12/2023')完成,因为它预计是美国地区.

我正在try 通过以下方式使用Luxon库来完成这项工作:

import { DateTime } from 'luxon';
var luxonDate = DateTime.fromFormat("13/12/2023", 'dd/MM/yyyy');

然而,上述方法仅适用于没有时间的约会.我还需要解析时间.我需要将格式字符串调整为以下内容:

import { DateTime } from 'luxon';
var luxonDate = DateTime.fromFormat("13/12/2023", 'dd/MM/yyyy h:mm:ss a');

这适用于带时间的日期,但问题是时间对我来说在字符串中是可选的,所以我能想到的唯一方法是以某种方式识别时间是否已过并使用正确的格式.

有没有人知道有没有其他不需要手动完成的 Select ?

推荐答案

您始终可以在解析后判断有效性,然后再次try 解析.

import { DateTime } from 'luxon';

function parseUKDateWithOptionalTime(s: string) : DateTime {
  let dt = DateTime.fromFormat(s, 'dd/MM/yyyy h:mm:ss a');
  if (!dt.isValid) {
    dt = DateTime.fromFormat(s, 'dd/MM/yyyy');
  }

  return dt;
}

但是,请记住,当您将不带时间的日期解析为Luxon DateTime对象时,您是在暗示您希望时间是00:00(午夜).从根本上说,这与约会是不同的概念(约会将包括一天中的所有时间,而不仅仅是午夜).JAVASCRIPT Date对象也有同样的问题(实际上是timestamp,而不是日期).

因此,您可以考虑不使用此函数,而是将业务逻辑拆分到不同的路径中.问问你自己,当有人提供一个完整的日期时,它实际上是多少,这与提供日期和时间有什么不同.例如,一个完整的日期可能表示一个生日,表示确认一天内的任何时间,或者表示一个工作日,在该工作日中,折扣一直有效到一天结束.而日期和时间通常表示某事发生或将要发生的确切时间点.

Javascript相关问答推荐

如何使用侧边滚动按钮具体滚动每4个格?

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

React Code不在装载上渲染数据,但在渲染上工作

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

为什么当我解析一个promise时,输出处于挂起状态?

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

如何从URL获取令牌?

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

虚拟滚动实现使向下滚动可滚动到末尾

保持物品顺序的可变大小物品分配到平衡组的算法

JQuery Click事件不适用于动态创建的按钮

如何将未排序的元素追加到数组的末尾?

为什么JPG图像不能在VITE中导入以进行react ?

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

react 路由DOM有条件地呈现元素

ComponentWillReceiveProps仍在React 18.2.0中工作

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

Reaction-在同一页内滚动导航(下拉菜单)

暂停后只有一次旋转JS

Node.js的Fetch()调用总是创建新的Express会话