百度时间显示北京时间解析及代码示例(1.模仿百度北京时间时钟)

百度时间是指百度搜索结果页面显示的搜索时间戳,通常以“刚刚”、“1小时前”等形式表达。而这些时间都是以北京时间为基准进行显示的。那么,如何从百度时间中解析出北京时间呢?本文将从以下多个方面作详细阐述,并提供代码示例

一、解析思路

百度时间相对较为复杂,包括了今年、昨天、前天、3天前、4天前、一周前、两周前、三周前、1个月前、2个月前、3个月前等多种时间表示方式。为了从中解析出北京时间,我们需要先将其转化为一个时间戳,然后再将时间戳转化为北京时间。

二、解析过程

1. 时间戳转化

/**
 * 解析百度时间,获取时间戳
 * createTime:2021-01-18-09:27:40
 * author:Believe
 */

function parseBaiduTime(baiduTime) {
    var timestamp = '';
    var now = new Date();
    if (baiduTime == '刚刚') {
        timestamp = parseInt(now.getTime() / 1000);
    } else if (baiduTime.indexOf('秒前') != -1) {
        var second = parseInt(baiduTime);
        timestamp = parseInt(now.getTime() / 1000) - second;
    } else if (baiduTime.indexOf('分钟前') != -1) {
        var minute = parseInt(baiduTime);
        timestamp = parseInt(now.getTime() / 1000) - minute * 60;
    } else if (baiduTime.indexOf('小时前') != -1) {
        var hour = parseInt(baiduTime);
        timestamp = parseInt(now.getTime() / 1000) - hour * 60 * 60;
    } else if (baiduTime.indexOf('年') != -1) {
        timestamp = Date.parse(baiduTime.replace('年', '/').replace('月', '/').replace('日', '')) / 1000;
    } else {
        var date = new Date();
        if (baiduTime.indexOf('昨天') != -1) {
            date.setDate(date.getDate() - 1);
        } else if (baiduTime.indexOf('前天') != -1) {
            date.setDate(date.getDate() - 2);
        } else if (baiduTime.indexOf('天前') != -1) {
            var day = parseInt(baiduTime);
            date.setDate(date.getDate() - day);
        } else if (baiduTime.indexOf('周前') != -1) {
            var week = parseInt(baiduTime);
            date.setDate(date.getDate() - week * 7);
        } else if (baiduTime.indexOf('月前') != -1) {
            var month = parseInt(baiduTime);
            date.setMonth(date.getMonth() - month);
        }
        timestamp = parseInt(date.getTime() / 1000);
    }
    return timestamp;
}

2. 时间戳转化为北京时间

/**
 * 将时间戳转为北京时间
 * time: 时间戳
 * format: 时间格式,如'Y-m-d H:i:s'
 */

function timestampToBjTime(time, format) {
    var bjTime = '';
    if (time == '') { // 如果时间戳为空,返回空串
        return bjTime;
    } else {
        var date = new Date(parseInt(time) * 1000);
        date.setHours(date.getHours() + 8);
        bjTime = dateFormat(date, format);
    }
    return bjTime;
}

三、代码示例

将上述两个函数结合起来,即可将百度时间解析为北京时间。

/**
 * 解析百度时间,返回北京时间
 * baiduTime:百度时间
 * format:时间格式,如'Y-m-d H:i:s'
 */

function parseBaiduTimeToBjTime(baiduTime, format) {
    var timestamp = parseBaiduTime(baiduTime); // 获取时间戳
    var bjTime = timestampToBjTime(timestamp, format); // 转化为北京时间
    return bjTime;
}

四、小结

通过上述函数的代码示例,我们可以轻松地将百度时间解析为北京时间。这对于很多需要对搜索结果中的时间信息进行统计、展示和分析等工作的应用程序来说,会非常有帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平