我有这样的文字字符串:
1398097442.61 INFO Some Name: Some Thing ...9381
我想将开头的数字转换为人类可读的日期时间。
我正在做的是:
input.replace(/^(\d+\.?\d*)/g, new Date(parseFloat("$1") * 1000).toGMTString());
这不起作用。如果我只是重印这场比赛" $ 1"没关系。我该如何操纵比赛?
答案 0 :(得分:3)
确保传递一个要替换的函数(毕竟,这不是Scala): - )
input.replace(/^(\d+\.?\d*)/g, function(match, timestamp) {
return new Date(parseFloat(timestamp) * 1000).toGMTString();
});
你 这样做的方式是从字符串“$ 1”调用parseFloat
的结果创建了一个日期,然后取结果(NaN
)并传递给它到Date
构造函数并获得GMT字符串 - 然后将其用作正则表达式的替换字符串。
您希望做的事情是推迟执行new Date
代码,直到您匹配为止。由于String.prototype.replace
可以将函数作为第二个参数,因此我们可以将new Date
行为包装在函数中,一切都可以正常工作。
答案 1 :(得分:1)
你可能需要这个:
var subject = "1398097442.61 INFO Some Name: Some Thing ...9381";
var date = new Date(parseFloat(subject.replace(/(\d+\.\d+)/g, "$1")) * 1000).toGMTString();
console.log(date);
<强> 样本: 强>