如何使用 JavaScript 中的格式规范将字符串转换为日期时间?

IT技术 javascript datetime type-conversion
2021-01-29 16:18:31

如何通过指定格式字符串将字符串转换为 javascript 中的日期时间对象?

我正在寻找类似的东西:

var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
6个回答

使用,如果你的字符串是兼容的如果您的格式不兼容(我认为是),您必须自己解析字符串(使用正则表达式应该很容易)并创建一个新的 Date 对象,其中包含年、月、日、时、分和秒的显式值。new Date(dateString)Date.parse()

@ianaz:几乎所有在美国使用的东西,但缺少欧洲大部分地区使用的格式“几乎”太大了。但是 new Date 是自定义函数的良好基础。
2021-03-20 16:18:31
new Date(dateString) 对我来说很好用,Date.parse() 而是转换为毫秒,因此返回一个数字而不是 Date 类型。
2021-03-30 16:18:31
Date.parse 是最好的解决方案!它解析几乎所有东西!+1
2021-04-02 16:18:31

我认为这可以帮助您:http : //www.mattkruse.com/javascript/date/

getDateFromFormat()您可以稍微调整一个功能来解决您的问题。

更新:javascripttoolbox.com 上提供了示例的更新版本

+1,好的库..纯 javascript ......太棒了。谢谢
2021-03-17 16:18:31
不幸的是,javascripttoolbox.com链接也已关闭。
2021-03-19 16:18:31
两个链接都失效了
2021-03-29 16:18:31
TypeError: Object Date has no method 'getDateFromFormat'
2021-04-05 16:18:31
如果可以,请更新链接。这已经没有用了。
2021-04-08 16:18:31

@Christoph 提到使用正则表达式来解决这个问题。这是我正在使用的:

var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString); 
var dateObject = new Date(
    (+dateArray[1]),
    (+dateArray[2])-1, // Careful, month starts at 0!
    (+dateArray[3]),
    (+dateArray[4]),
    (+dateArray[5]),
    (+dateArray[6])
);

它绝不是智能的,只需配置正则表达式并new Date(blah)满足您的需求。

编辑:在 ES6 中使用解构可能更容易理解:

let dateString = "2010-08-09 01:02:03"
  , reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
  , [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds);

但老实说,这些天我伸手去拿像 Moment 这样的东西

关于如何在其中添加时区的任何评论?
2021-03-11 16:18:31
@minitech 这/g是来自现有项目的草率复制/粘贴。lastindex是由编辑添加的(为了打击\g我想的?)。我现在将它们移除。谢谢你指出这一点。
2021-03-23 16:18:31
非常好的答案..对我真的很有用
2021-03-27 16:18:31
为什么要使用/g标志,然后才设置lastIndex0只是不要使用全局匹配。
2021-04-02 16:18:31
@bažmegakapa 而不是哭泣,您也许可以编辑答案并添加“var”?
2021-04-07 16:18:31

JavaScript 中不存在复杂的日期/时间格式化例程。

您将不得不使用外部库进行格式化日期输出,来自 Flagrant Badassery 的“JavaScript Date Format”看起来非常有前途。

对于输入转换,已经提出了一些建议。:)

“必须”是相对的。当然,您可以构建自己的实现。:)
2021-03-14 16:18:31

查看Moment.js它是一个现代而强大的库,弥补了 JavaScript 糟糕的 Date 函数(或缺少它)。

我没有投反对票,但我只是想说这很慢。对于台式机可以,但对于移动设备可能太慢(取决于您的需要)。
2021-03-15 16:18:31
我没有投反对票,但也许确切地知道 Moment.js 中的哪个函数会提供所需的行为会很好(对于我们已经在使用 Moment.js 但不知道要使用的特定函数的懒人) .
2021-03-24 16:18:31
本地化看起来很有希望,为点格式选择任何中欧语言环境。但是,我没有对其进行测试,并且完整的日期时间格式不在我所看到的示例中。
2021-03-26 16:18:31