Javascript解析不带日期的时间
Javascript parsing Times without Date
我需要在代码中解析和操作不带日期的Times。例如,我可能会从时间选择器中获得字符串"15:00"。我想把它变成某种Time对象——我通常在Python中工作,它有不同的Date、Time和Datetime对象。
然而,我看到的所有解决方案都集中在使用Date对象上。这无法解析像"15:00"这样的字符串,因为它需要日期信息。我不想在《泰晤士报》中添加任意的"日期"信息,尤其是因为"日期"似乎会根据日期和地区对夏令时之类的事情做出假设,而且它似乎有自动尝试将时间转换为给定地区的风险。此外,我希望能够添加时间,例如"15:00+1小时"
解析和处理与日期无关的"原始"时间的建议解决方案是什么?
这里有一个适用于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)
http://momentjs.com/docs/#/parsing/string-formats/
不幸的是,没有一个好的解决方案。JavaScript只有一个Date
对象,因为它实际上是一个日期+时间,所以可能被误名了。
你可能想更深入地思考一件事——你说你只想用时间工作,但你是指一天中的时间还是指持续时间 例如,您说您可能想要一个类似"15:00+1小时"的操作。不管怎样,那显然是16:00。但是"15:00+10小时"呢?如果你谈论的是持续时间,那可能是25:00,但如果你谈论一天中的时间,那也可能是01:00。 事实上,这可能不是01:00,因为并非所有的日子都有24小时。有些日子有23、23.5、24.5或25小时,这取决于时区以及夏令时当天是开始还是结束。因此,在一天中的时间上下文中,您可能确实希望在计算中包含特定的日期和区域。当然,如果你说的是24小时工作制,那么这一点就无关紧要了。 如果您谈论的是持续时间,您可能需要再次查看moment.js,但不要查看 最后,您可能需要考虑使用纯javascript将时间字符串中的小时和分钟解析为数字。根据需要对数字进行操作,然后再次输出字符串。但你的问题似乎是在寻找更有效的方法。moment
对象。那里还有另一个对象,moment.duration
。参考资料在这里。
我最终使用了以下内容,因为我已经在应用程序中使用了moment
:
var str = '15:16:33';
var d = new moment(str, 'HH:mm:ss');
有关可以使用的其他格式字符串,请参阅Moment String+Format文档。
我知道我参加这个聚会已经晚了8年多,但值得注意的是,moment.js
已经不再开发,正在使用起搏器进行维护。实际上,他们并不建议在新应用程序中使用moment.js。
更多详细信息请点击此处:https://momentjs.com/docs/
我最近不得不为一个项目做这件事,但实际上不需要包含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小时)。
moment().format(moment.HTML5_FMT.TIME_SECONDS); // 17:44:56
您还可以传入一个参数,如2019-11-08T17:44:56.144
。
moment('2019-11-08T17:44:56.144').format(moment.HTML5_FMT.TIME_SECONDS); // 17:44:56
https://momentjs.com/docs/#/parsing/special-formats/
我们知道JavaScript
中的Date类必须始终包含date
,仅输入time
是不够的。
但当被问到时,我不需要输入日期。这可能意味着:
- 你打算把两个日期相互比较一下
- 这两个日期是同一天
如果是这样,那么作为一个技巧,您可以将特定日期(任何日期)作为字符串添加到您的时间中。(例如0000-01-01
)
例如,此代码不正确:
var d1 = '00:53:57.123';
var d2 = '00:53:58.124';
console.log(new Date(d2).getTime() - new Date(d1).getTime());
//result: NaN
但这样你就可以得到正确的结果:
var d1 = '00:53:57.123';
var d2 = '00:53:58.124';
d1 = '0000-01-01 ' + d1;
d2 = '0000-01-01 ' + d2;
console.log(new Date(d2).getTime() - new Date(d1).getTime());
//result: 1001
我知道8年后我会写这篇文章,但现在不再建议使用moment.js库,因为它不再受支持,luxo.js是首选(就像moment.js的进化一样),你可以在这里找到更多:https://moment.github.io/luxon/api-docs/index.html
- 更改angularjs中的日期-时间格式
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 将日期时间从json转换为可读格式
- 使用时刻.js从日期时间中提取时间
- 两个日期时间选择器
- Javascript:如何在onChange事件期间更改日期时间值
- .Net webApi ISO日期时间和IE8
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 转换日期时间格式
- 在JavaScript中转换日期/时间格式
- JavaScript JSON关联对象键和值都作为日期时间戳
- 将日期时间javascript绑定到表列
- 将JS日期解析为C#日期时间
- 使用JavaScript将客户端日期/时间字符串转换为JSON日期/时间串
- 从javascript数组获取php的日期时间
- 格式化momentjs日期时间
- 这个正则表达式的日期/时间有什么问题
- Mongoose查询在两个日期时间之间提取数据
- 当转换为Python日期时间时,Node的时间戳落后3分钟
- 自定义angularjs过滤器日期时间格式额外字符