![](/img/trans.png)
[英]Custom JavaScript different in page source than in file as pasted
[英]Date in javascript different that the page source
如果我查看這個網站的頁面源代碼,會有一段 HTML 看起來像:
<tr>
<td class="start-time text-right">2020-01-05T16:30:00Z</td>
<td>Pre-Show</td>
<td>Tech Crew</td>
<td rowspan="2" class="visible-lg text-center"> <i class="fa fa-clock-o text-gdq-red" aria-hidden="true"></i>
0:10:00 </td>
</tr>
如果我使用 javascript 獲取start-time
類的innerText
,那么我會得到字符串“10:30 AM”。
這並不奇怪,因為它與瀏覽器中顯示的內容相同:
但是如何獲取原始的大時間戳並將其轉換為日期對象?
為了獲取日期對象,我們需要一天、一個月、一年、一個 24 小時格式的時間和一個時區
查看您提供的鏈接,我可以看到他們在.day-split
提供了日期,因此通過一些簡單的文本操作,我們能夠提取所需的信息。
Javascript:
//data scaped from website::
var date = "Sunday, January 5th"; //from inside .day-split
var time = "10:30 AM"; // from inside .start-time
var timezone = "(detected as UTC+02:00)"; // from span #offset-detected
//data extraction and cleanup::
var day = parseInt(date.split(" ")[2]);
var month = date.split(" ")[1];
var year = new Date().getFullYear();
var time = convertTo24Hour(time)
var timezone = timezone.split(" ")[2].replace(")","")
// building the string and parsing it::
var dateString = [day, month, year, time, timezone].join(" ");
var dateObj = new Date(dateString);
// loging the output::
console.log(dateObj)
// a function used to convert time format (12H -> 24H)::
function convertTo24Hour(time) {
var hours = parseInt(time.substr(0, 2));
if (time.indexOf('AM') != -1 && hours == 12) {
time = time.replace('12', '0');
}
if (time.indexOf('PM') != -1 && hours < 12) {
time = time.replace(hours, (hours + 12));
}
return time.replace(/( AM| PM)/, '');
}
我的回答假設您已經知道如何從網站上抓取數據。
您必須導航 DOM 並解析頁面中不同元素的 textContents,如下所示:
var months = ["January","February","March","April","May","June","July", "August","September","October","November","December"];
function getDate(timeTD){
var dateTR = timeTD.parentNode;
while(!dateTR.className || dateTR.className.indexOf("day-split") == -1){
dateTR = dateTR.previousSibling;
}
var month = months.indexOf(dateTR.textContent.split(" ")[1]);
var date = dateTR.textContent.replace(/\D/g, "");
var hours = timeTD.textContent.toLowerCase().indexOf("pm") > -1 ? Number(timeTD.textContent.split(":")[0]) + 12 : timeTD.textContent.split(":")[0];
if(hours == "12") hours = 0;
if(hours == 24) hours = 12;
var minutes = timeTD.textContent.split(":")[1].replace(/\D/g, "");
var dateObj = new Date();
dateObj.setMonth(month);
dateObj.setDate(date);
dateObj.setHours(hours);
dateObj.setMinutes(minutes);
return dateObj;
}
getDate(document.getElementsByClassName("start-time")[0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.