解析时间';1小时3000万辆4sx27;在JavaScript中作为时间先行
假设我有一个字符串解析时间';1小时3000万辆4sx27;在JavaScript中作为时间先行,javascript,node.js,momentjs,date-fns,Javascript,Node.js,Momentjs,Date Fns,假设我有一个字符串1hr 30m 4s。我将如何使用Node.js将该字符串解析为(显然)从执行日期算起的未来某个时间 我已经看过NPM包日期fns和时刻,但它们似乎不符合我的要求 我想你可以做一个RegExp?很简单。我已经考虑过至少有几秒钟的时间。您需要分别提取hr、min和sec的第2、第4和第6组 ((\d{1,2})hr.(\d{1,2})m.(\d{1,2})s) 你猜对了。作为将来的参考,如果你试图自己解决问题,并发表一篇你有问题的文章,你可能会得到更好的答案 对于所有涉及的人来说
1hr 30m 4s
。我将如何使用Node.js将该字符串解析为(显然)从执行日期算起的未来某个时间
我已经看过NPM包日期fns
和时刻
,但它们似乎不符合我的要求
我想你可以做一个RegExp?很简单。我已经考虑过至少有几秒钟的时间。您需要分别提取hr、min和sec的第2、第4和第6组
((\d{1,2})hr.(\d{1,2})m.(\d{1,2})s)
你猜对了。作为将来的参考,如果你试图自己解决问题,并发表一篇你有问题的文章,你可能会得到更好的答案 对于所有涉及的人来说,出现堆栈溢出并提出问题毕竟比谷歌搜索“javascript regex”要困难得多
var date = new Date();
var s = '1hr 30m 4s';
var re = /((\d+)hr)?( (\d+)m)?( (\d+)s)?/m;
var match = re.exec(s);
if (match != null) {
if (typeof(match[2]) !== 'undefined') {
date.setHours( date.getHours() + parseInt(match[2]) );
}
if (typeof(match[4]) !== 'undefined') {
date.setMinutes( date.getMinutes() + parseInt(match[4]) );
}
if (typeof(match[6]) !== 'undefined') {
date.setSeconds( date.getSeconds() + parseInt(match[6]) );
}
}
console.log(date);
既然您提到了Moment.js,我建议使用他们的格式,即“PT1H30M4S” 这种格式不仅可以被Moment.js解析,还可以被许多其他语言和库解析(hooray for standards) 您当前的字符串距离不太远,可以很容易地进行转换 比如说
const durationString='1hr 30m 4s'
常量iso8601TimeInterval='PT'+durationString
.replace(/hr/ig,'h')//将“hr”替换为“h”
.replace(//\s/g',)//删除空格
.toUpperCase()//大写
console.log('时间间隔:',iso8601TimeInterval)
常数持续时间=时刻持续时间(ISO8601时间间隔)
const now=力矩()
console.info('Now:',Now.format())
console.info('Then:',now.add(duration.format())
您可以按照以下思路做一些事情:
var d=“1小时30米4”
var ds=d.split(/hr | m | s/)
var dnow=新日期()
var dlater=新日期()
dlater.setTime(dnow.getTime()+(ds[2]*1+ds[1]*60+ds[0]*3600)*1000)
console.log(“现在”,dnow);
console.log(“稍后”,dlater)
“我想你可以做一个RegExp”你可能应该选择分钟/秒之前的空格来处理没有这三部分的间隔,例如“5m 1s”