|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
写好的网站代码需要改进
1处是原本里面有4个TIME1,2,3,4分别
window.onload = function() { var now = new Date();
var strDateTime = [[AddZero(now.getMonth() 1), AddZero(now.getDate())].join("/"), [AddZero(now.getHours()),
AddZero(now.getMinutes())].join(":"), now.getHours() >= 12 ? "" : ""].join(" ");
document.getElementById("time1").innerHTML = "" strDateTime;
document.getElementById("time2").innerHTML = "" strDateTime;
document.getElementById("time3").innerHTML = "" strDateTime;
document.getElementById("time4").innerHTML = "" strDateTime;
需要加入什么代码可以把每个TIME时间根据访问IP本地时间做推前,比如本地时间是2023年6月17号12:40,time1可以任意改成2023年6月13号9:40类似这样。
望高手支招。谢谢
本帖最后由 歌者文明清理员 于 2023-6-18 10:30 编辑
要实现根据访问 IP 的本地时间推前每个 TIME 时间的功能,您需要从服务器获取访问者的 IP 地址,然后使用 IP 地址查询到访问者所在时区,最后根据时区将当前时间向前推置后赋值给 TIME。
以下是一种实现方式:
- 首先,在前端代码中,需要将每个 TIME 元素的 id 属性改为一个有意义的名称,如 time1 -> time-beijing、time2 -> time-tokyo 等。这样可以方便后面的 JavaScript 代码根据名称找到对应的元素。
- 在前端代码中添加一个隐藏的表单元素,用于存储访问者的 IP 地址。例如:
- <input type="hidden" id="ip-address" value="">
复制代码
- 在前端代码中添加一个 JavaScript 函数,用于从服务器获取访问者的 IP 地址。例如:
- function getIpAddress() {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", "https://api.ipify.org", true);
- xhr.onload = function () {
- if (xhr.status === 200) {
- document.getElementById("ip-address").value = xhr.responseText;
- }
- };
- xhr.send();
- }
复制代码
这个函数会向 https://api.ipify.org 发送 GET 请求,获取访问者的 IP 地址,并将其存储到隐藏的表单元素中。
- 在前端代码中调用上述函数,以获取访问者的 IP 地址。例如:
- window.onload = function () {
- // 获取访问者的 IP 地址
- getIpAddress();
- // ...
- };
复制代码
- 在后端代码中,需要使用一个 IP 地址查询 API 来查询访问者所在时区。以 Python 为例,可以使用 ipwhois 库来实现这个功能。例如:
- import ipwhois
- from datetime import datetime, timedelta
- def get_local_time(ip_address):
- # 使用 ipwhois 库查询 IP 所在地信息
- obj = ipwhois.IPWhois(ip_address)
- res = obj.lookup_rdap()
- # 从地理位置信息中提取时区信息
- time_zone = res.get("asn_description", "").split(" ")[-1]
- # 根据时区计算当前时间,并将其向前推置
- now = datetime.utcnow() + timedelta(hours=int(time_zone))
- return now.strftime("%Y年%m月%d日 %H:%M")
复制代码
这个函数接收一个 IP 地址作为参数,使用 IPWhois 类查询该 IP 所在地的信息。然后,从地理位置信息中提取出时区信息,并根据时区计算当前时间,并将其向前推置。最后,将计算出的时间格式化为字符串并返回。
- 在前端代码中,获取到访问者的 IP 地址后,需要将其发送到服务器端,并请求服务器端返回本地时间。例如:
- function updateLocalTime() {
- var xhr = new XMLHttpRequest();
- xhr.open("POST", "/get-local-time", true);
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- xhr.onload = function () {
- if (xhr.status === 200) {
- var localTime = xhr.responseText;
- // 更新每个 TIME 时间
- document.getElementById("time-beijing").innerHTML = localTime;
- document.getElementById("time-tokyo").innerHTML = localTime;
- // ...
- }
- };
- xhr.send("ip_address=" + document.getElementById("ip-address").value);
- }
复制代码
这个函数会向服务器端发送一个 POST 请求,将访问者的 IP 地址作为参数发送到服务器端。服务器端收到请求后,使用上述函数计算本地时间,并将其返回。最后,前端代码根据返回的时间更新每个 TIME 时间。
- 在后端代码中,需要实现一个接口来处理前面发起的 /get-local-time 请求。例如:
- from flask import Flask, request
- app = Flask(__name__)
- @app.route("/get-local-time", methods=["POST"])
- def get_local_time():
- ip_address = request.form.get("ip_address")
- local_time = get_local_time(ip_address)
- return local_time
复制代码
这个接口接收一个 POST 请求,从请求参数中取出访问者的 IP 地址,并使用上述函数计算本地时间,并将其返回。
综上,您可以根据上述步骤来修改您的网站代码,以实现根据访问 IP 的本地时间推前每个 TIME 时间的功能。
|
|