鱼C论坛

 找回密码
 立即注册
查看: 1245|回复: 3

[已解决]自动记录访问者的时间,如何做加减。谢谢

[复制链接]
发表于 2023-6-18 06:57:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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:26:41
本帖最后由 歌者文明清理员 于 2023-6-18 10:30 编辑

要实现根据访问 IP 的本地时间推前每个 TIME 时间的功能,您需要从服务器获取访问者的 IP 地址,然后使用 IP 地址查询到访问者所在时区,最后根据时区将当前时间向前推置后赋值给 TIME。

以下是一种实现方式:

  • 首先,在前端代码中,需要将每个 TIME 元素的 id 属性改为一个有意义的名称,如 time1 -> time-beijing、time2 -> time-tokyo 等。这样可以方便后面的 JavaScript 代码根据名称找到对应的元素。
  • 在前端代码中添加一个隐藏的表单元素,用于存储访问者的 IP 地址。例如:

    1. <input type="hidden" id="ip-address" value="">
    复制代码

  • 在前端代码中添加一个 JavaScript 函数,用于从服务器获取访问者的 IP 地址。例如:
    1. function getIpAddress() {
    2.     var xhr = new XMLHttpRequest();
    3.     xhr.open("GET", "https://api.ipify.org", true);
    4.     xhr.onload = function () {
    5.         if (xhr.status === 200) {
    6.             document.getElementById("ip-address").value = xhr.responseText;
    7.         }
    8.     };
    9.     xhr.send();
    10. }
    复制代码

    这个函数会向 https://api.ipify.org 发送 GET 请求,获取访问者的 IP 地址,并将其存储到隐藏的表单元素中。
  • 在前端代码中调用上述函数,以获取访问者的 IP 地址。例如:

    1. window.onload = function () {
    2.     // 获取访问者的 IP 地址
    3.     getIpAddress();

    4.     // ...
    5. };
    复制代码

  • 在后端代码中,需要使用一个 IP 地址查询 API 来查询访问者所在时区。以 Python 为例,可以使用 ipwhois 库来实现这个功能。例如:

    1. import ipwhois
    2. from datetime import datetime, timedelta

    3. def get_local_time(ip_address):
    4.     # 使用 ipwhois 库查询 IP 所在地信息
    5.     obj = ipwhois.IPWhois(ip_address)
    6.     res = obj.lookup_rdap()

    7.     # 从地理位置信息中提取时区信息
    8.     time_zone = res.get("asn_description", "").split(" ")[-1]

    9.     # 根据时区计算当前时间,并将其向前推置
    10.     now = datetime.utcnow() + timedelta(hours=int(time_zone))
    11.     return now.strftime("%Y年%m月%d日 %H:%M")
    复制代码

    这个函数接收一个 IP 地址作为参数,使用 IPWhois 类查询该 IP 所在地的信息。然后,从地理位置信息中提取出时区信息,并根据时区计算当前时间,并将其向前推置。最后,将计算出的时间格式化为字符串并返回。
  • 在前端代码中,获取到访问者的 IP 地址后,需要将其发送到服务器端,并请求服务器端返回本地时间。例如:

    1. function updateLocalTime() {
    2.     var xhr = new XMLHttpRequest();
    3.     xhr.open("POST", "/get-local-time", true);
    4.     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    5.     xhr.onload = function () {
    6.         if (xhr.status === 200) {
    7.             var localTime = xhr.responseText;
    8.             // 更新每个 TIME 时间
    9.             document.getElementById("time-beijing").innerHTML = localTime;
    10.             document.getElementById("time-tokyo").innerHTML = localTime;
    11.             // ...
    12.         }
    13.     };
    14.     xhr.send("ip_address=" + document.getElementById("ip-address").value);
    15. }
    复制代码

    这个函数会向服务器端发送一个 POST 请求,将访问者的 IP 地址作为参数发送到服务器端。服务器端收到请求后,使用上述函数计算本地时间,并将其返回。最后,前端代码根据返回的时间更新每个 TIME 时间。
  • 在后端代码中,需要实现一个接口来处理前面发起的 /get-local-time 请求。例如:

    1. from flask import Flask, request

    2. app = Flask(__name__)

    3. @app.route("/get-local-time", methods=["POST"])
    4. def get_local_time():
    5.     ip_address = request.form.get("ip_address")
    6.     local_time = get_local_time(ip_address)
    7.     return local_time
    复制代码

    这个接口接收一个 POST 请求,从请求参数中取出访问者的 IP 地址,并使用上述函数计算本地时间,并将其返回。

    综上,您可以根据上述步骤来修改您的网站代码,以实现根据访问 IP 的本地时间推前每个 TIME 时间的功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-18 10:26:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 歌者文明清理员 于 2023-6-18 10:30 编辑

要实现根据访问 IP 的本地时间推前每个 TIME 时间的功能,您需要从服务器获取访问者的 IP 地址,然后使用 IP 地址查询到访问者所在时区,最后根据时区将当前时间向前推置后赋值给 TIME。

以下是一种实现方式:

  • 首先,在前端代码中,需要将每个 TIME 元素的 id 属性改为一个有意义的名称,如 time1 -> time-beijing、time2 -> time-tokyo 等。这样可以方便后面的 JavaScript 代码根据名称找到对应的元素。
  • 在前端代码中添加一个隐藏的表单元素,用于存储访问者的 IP 地址。例如:

    1. <input type="hidden" id="ip-address" value="">
    复制代码

  • 在前端代码中添加一个 JavaScript 函数,用于从服务器获取访问者的 IP 地址。例如:
    1. function getIpAddress() {
    2.     var xhr = new XMLHttpRequest();
    3.     xhr.open("GET", "https://api.ipify.org", true);
    4.     xhr.onload = function () {
    5.         if (xhr.status === 200) {
    6.             document.getElementById("ip-address").value = xhr.responseText;
    7.         }
    8.     };
    9.     xhr.send();
    10. }
    复制代码

    这个函数会向 https://api.ipify.org 发送 GET 请求,获取访问者的 IP 地址,并将其存储到隐藏的表单元素中。
  • 在前端代码中调用上述函数,以获取访问者的 IP 地址。例如:

    1. window.onload = function () {
    2.     // 获取访问者的 IP 地址
    3.     getIpAddress();

    4.     // ...
    5. };
    复制代码

  • 在后端代码中,需要使用一个 IP 地址查询 API 来查询访问者所在时区。以 Python 为例,可以使用 ipwhois 库来实现这个功能。例如:

    1. import ipwhois
    2. from datetime import datetime, timedelta

    3. def get_local_time(ip_address):
    4.     # 使用 ipwhois 库查询 IP 所在地信息
    5.     obj = ipwhois.IPWhois(ip_address)
    6.     res = obj.lookup_rdap()

    7.     # 从地理位置信息中提取时区信息
    8.     time_zone = res.get("asn_description", "").split(" ")[-1]

    9.     # 根据时区计算当前时间,并将其向前推置
    10.     now = datetime.utcnow() + timedelta(hours=int(time_zone))
    11.     return now.strftime("%Y年%m月%d日 %H:%M")
    复制代码

    这个函数接收一个 IP 地址作为参数,使用 IPWhois 类查询该 IP 所在地的信息。然后,从地理位置信息中提取出时区信息,并根据时区计算当前时间,并将其向前推置。最后,将计算出的时间格式化为字符串并返回。
  • 在前端代码中,获取到访问者的 IP 地址后,需要将其发送到服务器端,并请求服务器端返回本地时间。例如:

    1. function updateLocalTime() {
    2.     var xhr = new XMLHttpRequest();
    3.     xhr.open("POST", "/get-local-time", true);
    4.     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    5.     xhr.onload = function () {
    6.         if (xhr.status === 200) {
    7.             var localTime = xhr.responseText;
    8.             // 更新每个 TIME 时间
    9.             document.getElementById("time-beijing").innerHTML = localTime;
    10.             document.getElementById("time-tokyo").innerHTML = localTime;
    11.             // ...
    12.         }
    13.     };
    14.     xhr.send("ip_address=" + document.getElementById("ip-address").value);
    15. }
    复制代码

    这个函数会向服务器端发送一个 POST 请求,将访问者的 IP 地址作为参数发送到服务器端。服务器端收到请求后,使用上述函数计算本地时间,并将其返回。最后,前端代码根据返回的时间更新每个 TIME 时间。
  • 在后端代码中,需要实现一个接口来处理前面发起的 /get-local-time 请求。例如:

    1. from flask import Flask, request

    2. app = Flask(__name__)

    3. @app.route("/get-local-time", methods=["POST"])
    4. def get_local_time():
    5.     ip_address = request.form.get("ip_address")
    6.     local_time = get_local_time(ip_address)
    7.     return local_time
    复制代码

    这个接口接收一个 POST 请求,从请求参数中取出访问者的 IP 地址,并使用上述函数计算本地时间,并将其返回。

    综上,您可以根据上述步骤来修改您的网站代码,以实现根据访问 IP 的本地时间推前每个 TIME 时间的功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-18 11:40:28 | 显示全部楼层
要根据访问者的本地时间来调整每个TIME的时间,您可以使用JavaScript的`toLocaleString()`方法。首先,获取访问者的本地时间,然后根据需要的偏移量设置每个TIME的时间。

以下是修改后的代码示例:


  1. window.onload = function() {
  2.     var now = new Date();
  3.     var localDateTime = new Date(now.toLocaleString()); // 获取访问者的本地时间

  4.     // 计算不同的偏移量(以分钟为单位)
  5.     var offset1 = -24 * 60;   // time1向前推1天
  6.     var offset2 = -48 * 60;   // time2向前推2天
  7.     var offset3 = -72 * 60;   // time3向前推3天
  8.     var offset4 = -96 * 60;   // time4向前推4天

  9.     // 应用偏移量并设置每个TIME的时间
  10.     document.getElementById("time1").innerHTML = getAdjustedDateTime(localDateTime, offset1);
  11.     document.getElementById("time2").innerHTML = getAdjustedDateTime(localDateTime, offset2);
  12.     document.getElementById("time3").innerHTML = getAdjustedDateTime(localDateTime, offset3);
  13.     document.getElementById("time4").innerHTML = getAdjustedDateTime(localDateTime, offset4);
  14. }

  15. function getAdjustedDateTime(dateTime, offset) {
  16.     var adjustedDateTime = new Date(dateTime.getTime() + offset * 60 * 1000);
  17.     return formatDate(adjustedDateTime); // 格式化日期时间字符串
  18. }

  19. function formatDate(date) {
  20.     var month = AddZero(date.getMonth() + 1);
  21.     var day = AddZero(date.getDate());
  22.     var hours = AddZero(date.getHours());
  23.     var minutes = AddZero(date.getMinutes());
  24.     return [month, day].join("/") + " " + [hours, minutes].join(":");
  25. }

  26. function AddZero(num) {
  27.     return num < 10 ? "0" + num : num;
  28. }
复制代码

在上述代码中,`offset1`、`offset2`、`offset3`和`offset4`表示每个TIME相对于本地时间的偏移量(以分钟为单位)。您可以根据需要调整这些偏移量。

求最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-18 12:28:38 | 显示全部楼层
为了实现你的需求,我们可以创建一个函数来减去特定的天数和小时。然后我们用这个函数来分别设置time1, time2, time3和time4的值。在你的示例中,我们可以减去4天和3小时来得到新的日期。

下面是一个示例代码:

  1. function subtractTime(days, hours) {
  2.     var now = new Date();
  3.     now.setDate(now.getDate() - days);
  4.     now.setHours(now.getHours() - hours);
  5.     return [[AddZero(now.getMonth() + 1), AddZero(now.getDate())].join("/"),
  6.             [AddZero(now.getHours()), AddZero(now.getMinutes())].join(":"),
  7.             now.getHours() >= 12 ? "PM" : "AM"].join(" ");
  8. }

  9. window.onload = function() {
  10.     document.getElementById("time1").innerHTML = subtractTime(4, 3);
  11.     document.getElementById("time2").innerHTML = subtractTime(3, 2);
  12.     document.getElementById("time3").innerHTML = subtractTime(2, 1);
  13.     document.getElementById("time4").innerHTML = subtractTime(1, 0);
  14. }
复制代码


注意:这个代码将时间减去了特定的天数和小时。在这个例子中,我把time1的时间设为了当前时间减去4天和3小时,把time2的时间设为了当前时间减去3天和2小时,把time3的时间设为了当前时间减去2天和1小时,把time4的时间设为了当前时间减去1天和0小时。你可以根据需要更改天数和小时数。

另外,我假设你的 AddZero 函数是用来在日期或时间的数值前面添加零(如果它们是一位数的话)。如果你没有这样的函数,你可以创建一个,像这样:

  1. function AddZero(num) {
  2.     return (num >= 0 && num < 10) ? "0" + num : num + "";
  3. }
复制代码

这个函数会检查传入的数值,如果它是一位数,就在前面添加一个零。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-4 21:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表