簡體   English   中英

javascript中的日期與頁面源不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM