Javascript解析时间不带日期

Javascript解析时间不带日期,javascript,datetime,time,Javascript,Datetime,Time,我需要解析和操作代码中没有日期的时间。例如,我可能会从时间选择器获取字符串“15:00”。我想把它转换成某种时间对象——我通常使用Python,它有不同的Date、Time和Datetime对象 然而,我看到的所有解决方案都集中在使用Date对象上。这无法解析像“15:00”这样的字符串,因为它需要日期信息。我不想在时间中添加任意的日期信息,特别是因为日期似乎会根据日期和区域设置对夏令时之类的事情进行假设,而且似乎存在自动尝试将时间转换为给定区域设置的风险。此外,我希望能够添加时间,例如“15:

我需要解析和操作代码中没有日期的时间。例如,我可能会从时间选择器获取字符串“15:00”。我想把它转换成某种时间对象——我通常使用Python,它有不同的Date、Time和Datetime对象

然而,我看到的所有解决方案都集中在使用Date对象上。这无法解析像“15:00”这样的字符串,因为它需要日期信息。我不想在时间中添加任意的日期信息,特别是因为日期似乎会根据日期和区域设置对夏令时之类的事情进行假设,而且似乎存在自动尝试将时间转换为给定区域设置的风险。此外,我希望能够添加时间,例如“15:00+1小时”


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

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

有一件事你可能需要更深入地思考——你说你只想用时间工作,但你是指一天中的某个时间,还是指一段时间?这是两个相关但略有不同的概念

例如,您说您可能需要“15:00+1小时”这样的操作。不管怎么说,那显然是16点。但是“15:00+10小时”呢?如果你说的是一个持续时间,可能是25:00,但如果你说的是一天中的时间,可能是01:00

事实上,可能不是1:00,因为不是所有的日子都有24小时。有些日子有23小时、23.5小时、24.5小时或25小时,这取决于时区以及DST在那天是开始还是停止。因此,在一天中的时间上下文中,您可能希望在计算中包含特定的日期和区域。当然,如果你说的是连续24小时工作,那么这一点就无关紧要了

如果您谈论的是持续时间-您可能希望再次查看,但不是在
时刻
对象。那里还有另一个物体,
瞬间。持续时间
。参考文献是


最后,您可能需要考虑使用纯JavaScript将时间字符串中的小时和分钟解析为数字。根据需要操纵数字,然后再次输出字符串。但你的问题似乎是在寻找更具管理性的东西。

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

var str = '15:16:33';
var d = new moment(str, 'HH:mm:ss');

有关可使用的其他格式字符串,请参阅。

这里是一个12或24小时的矩.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)

最近,我不得不为一个项目这样做,但实际上不需要包含moment.js,我使用的方法是手动解析时间,如下所示:

function parseTime(time) {    
    let timeInt = parseInt(time);
    let minutes = time.substring(3,5);

    // you could then add or subtract time here as needed

    if(time > '12:00') {
         return `${timeInt - 12}:${minutes} PM`;
    } else {
         return `${timeInt}:${minutes} AM`;
    }
}

如果你不想使用这个时刻,可以用它作为替代的开始。注意:这个例子使用es6语法。

好的,所以我知道我参加聚会迟到了。大约晚了6年,但这是我需要弄清楚的,并将其格式化为HH:mm:ss(24小时)

您还可以传入一个参数,如,
2019-11-08T17:44:56.144

moment('2019-11-08T17:44:56.144').format(moment.HTML5_FMT.TIME_SECONDS); // 17:44:56

如果您不想自己编写代码来完成这项工作,那么有或。我建议您自己编写所需的几行代码。因为没有日历问题,很简单。这就是我希望避免的。Moment.js和Date.js都关注日期时间,而不是时间,因此您仍然需要将任意日期信息粘贴到时间上,然后才能使用它。我可以想象它的实现从根本上来说并不复杂,但我很惊讶这还不存在。日期包括你知道的时间,所以只需在1970年1月1日工作,完成后扔掉残羹剩饭。这并不是说所有额外的数据信息都会减慢时间操纵……不幸的是,我在寻找“一天中的时间”而不是持续时间(因此,moment.js已过时)。看起来似乎没有托管解决方案,我不得不使用正则表达式字符串解析——这是一个遗憾,因为这是一种容易产生微妙错误的微妙东西,我更喜欢由经过良好测试的库来处理。如果你能将时间安排在某一天,那么
Date
moment
仍然是一个好主意。如果它总是独立的(比如一家餐厅每天营业的时间),那么边缘案例就更具挑战性。我不知道有什么好的js库适合这个。对不起,这有什么变化吗?我需要一个完全独立的时间(小时和分钟)在JavaScript。我一直在寻找这一整天哇。。。就是这样!基本上,一天中的时间日期对于我的(可能还有OP的)用例并不重要。只需要将时间字符串转换为有效的momentjs对象。想想网络上所有其他的帖子都在谈论这样的“不幸”和“不可能”呵呵。谢谢@SunLee“不可能”只是另一项工作:-)这会在夏令时刺伤你的背部。这是一个非常戏剧性的编程日。
moment('2019-11-08T17:44:56.144').format(moment.HTML5_FMT.TIME_SECONDS); // 17:44:56