这是我的代码。我想将div
下的日期值转换为日期字符串,并使用id=demo
在该字符串的innerText
部分下创建一个新日期。但是res
显示Invalid Date
。所以请帮我找出错误。
<!DOCTYPE html>
<html>
<body>
<div>
Monday, December 22, 2014 | 03:05:01 AM
</div>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction()
{
DivisionHoldingTime=document.getElementsByTagName("div");
var matches = DivisionHoldingTime[0].innerText;
var res = new Date (matches.trim().replace(/\|/,""));//**See Code Below
document.getElementById("demo").innerHTML =res;//Shows Invalid Date
}
</script>
</body>
</html>
如果我用这个
替换这个陈述 var res =new Date("Monday, December 22, 2014 | 03:05:01 AM".trim().replace(/\|/,""));
// document.getElementById("demo").innerHTML =res;-Shows the Date
然后它工作正常。然后,
为什么res
在第一种情况下将结果显示为Invalid date
?请为我找出错误。
答案 0 :(得分:1)
最后,经过大量搜索后,我的问题得到了解决。res
显示Invalid Date
的原因是innerText
无法删除字符串{{1}从字符串。当我替换代码
带
var res = new Date (matches.trim().replace(/\|/,""));
工作正常。
答案 1 :(得分:0)
不确定正则表达式,我使用:
/\w+,\s+\w+\s+\d{1,2},\s+\d{4}\s+\|\s+\d{2}:\d{2}:\d{2}\s+[ap]m/ig;
应手动解析匹配的字符串以生成Date对象,您可以使用以下内容:
// s is string in format DDD, MMM dd, dddd | hh:mm:ss ap
function parseString(s) {
s = s.toLowerCase();
var b = s.match(/[\w]+/g);
var months = {january:0, february:1, march:2, april:3, may:4, june:5,
july:6, august:7, september:8, october:9, november:10, december:11};
return new Date(b[3], months[b[1]], b[2], ((b[7]=='am'? 0 : 12) + b[4]%12), b[5], b[6]);
}
然后函数变为:
function myFunction() {
var all_DivTags = document.querySelectorAll("div");
var dateMatcherRegEx = /\w+,\s+\w+\s+\d{1,2},\s+\d{4}\s+\|\s+\d{2}:\d{2}:\d{2}\s+[ap]m/i;
for (i=0, iLen=all_DivTags.length; i<iLen; i++) {
if (dateMatcherRegEx.test(all_DivTags[i].textContent)) {
divisionHoldingTime = all_DivTags[i].textContent.match(dateMatcherRegEx)[0];
break;
}
}
document.getElementById("demo").innerHTML = parseString(divisionHoldingTime);
}
请注意,按照惯例,只有构造函数的名称以大写字母开头(尽管常量可能包含所有大写字母的名称)。