Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析时间';1小时3000万辆4sx27;在JavaScript中作为时间先行_Javascript_Node.js_Momentjs_Date Fns - Fatal编程技术网

解析时间';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”