Javascript解析没有日期的时间

man*_*eur 44 javascript time datetime

我需要在代码中解析和操作没有日期的Times.例如,我可能从时间戳中得到字符串"15:00".我想把它变成某种类型的Time对象 - 我通常使用Python,它具有不同的Date,Time和Datetime对象.

但是,我看到的所有解决方案都专注于使用Date对象.这不能解析像"15:00"这样的字符串,因为它需要日期信息.我不想向Times添加任意日期信息 - 特别是因为Date似乎根据日期和区域设置对夏令时等事项做出假设,并且似乎存在自动尝试将时间转换为给定的区域设置.此外,我希望能够添加时间,例如"15:00 + 1小时"

解析和处理与日期无关的"原始"时间的推荐解决方案是什么?

Mic*_*ole 64

这是一个12小时或24小时的moment.js解决方案:

moment('7:00 am', ['h:m a', 'H:m']); // Wed Dec 30 2015 07:00:00 GMT-0600 (CST)
moment('17:00', ['h:m a', 'H:m']);   // Wed Dec 30 2015 17:00:00 GMT-0600 (CST)
moment('17:00 am', ['h:m a', 'H:m']);// Wed Dec 30 2015 17:00:00 GMT-0600 (CST)
moment('17:00 pm', ['h:m a', 'H:m']);// Wed Dec 30 2015 17:00:00 GMT-0600 (CST)
Run Code Online (Sandbox Code Playgroud)

http://momentjs.com/docs/#/parsing/string-formats/

  • 我整天都在寻找这个 (2认同)
  • 这可能会在夏令时背后刺伤你。 (2认同)

Min*_*ice 18

因为我已经moment在我的应用程序中使用,所以我最终使用了以下内容:

var str = '15:16:33';
var d = new moment(str, 'HH:mm:ss');
Run Code Online (Sandbox Code Playgroud)

有关可以使用的其他格式字符串,请参阅Moment String + Format docs.


Mat*_*int 16

不幸的是,没有一个很好的解决方案.JavaScript只有一个Date对象,可能是错误名称,因为它确实是一个日期+时间.

你可能想要更深入思考的一件事 - 你说你想只与时间合作,但你的意思是一个时间或者你的意思是一段时间?这是两个相关但略有不同的概念.

例如,您说您可能想要"15:00 + 1小时"之类的操作.好吧,无论如何,这显然是16:00.但是"15:00 + 10小时"呢?如果你在谈论持续时间,那将是25:00,但如果你在谈论时间,它可能是01:00.

实际上,它可能不是 01:00,因为并非所有日子都有24小时.有些日子有23,23.5,24.5或25小时,具体取决于什么时区以及当天DST是开始还是停止.因此,在时间的天的情况下,你可能想在你的计算特定的日期和区域.当然,如果你是在谈论24小时的直接日,那么这一点就无关紧要了.

如果你在谈论持续时间 - 你可能想再看一下moment.js,但不是在moment对象上.那里还有另一个目标moment.duration.参考在这里.

最后,您可能想要考虑使用普通的javascript来解析时间字符串中的小时和分钟数字.根据需要操作数字,然后再次输出一个字符串.但你的问题似乎是你在寻找更有管理的东西.

  • 不幸的是,我正在寻找“一天中的时间”而不是持续时间(所以 moment.js 已经过时了)。看起来没有托管解决方案,我必须使用正则表达式字符串解析 - 这是一种耻辱,因为这是一种容易出现微妙错误的繁琐东西,我更喜欢由经过良好测试的库处理。 (3认同)
  • 这有什么变化吗?我需要一个完全独立的 JavaScript 时间(小时和分钟)。 (2认同)