吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4691|回复: 17
上一主题 下一主题
收起左侧

[其他原创] 时间间隔小工具,带时间倒计时/正计时,未来日期计算的功能

[复制链接]
跳转到指定楼层
楼主
思念是因为你 发表于 2025-4-1 17:19 回帖奖励
本帖最后由 思念是因为你 于 2025-4-1 17:26 编辑

闲来无事翻到之前想查看自己还要多久退休的时间工具,拿来分享一下,顺便增加一个未来时间计算的功能。做着玩的,希望大家用的上,东西比较简单,给点鼓励就好。
工具介绍
1. 时间倒计时/正计时功能
  • 功能:用户可以选择一个日期,工具会实时显示从这个日期到当前时间之间的间隔。
  • 特点
    • 支持过去时间(正计时)和未来时间(倒计时)
    • 自动识别显示"还剩"或"已过"状态
    • 彩色提示:未来时间绿色显示,过去时间红色显示
    • 精确显示年、月、日、时、分、秒
    • 自动保存用户上次设置的时间(使用localStorage)
    • 实时动态更新(每秒刷新一次)


2. 未来日期计算功能
  • 功能:用户可以输入一个正整数天数,工具会自动计算并显示从今天开始该天数后对应的日期,并以中文格式展示星期、月份等信息。
  • 特点
    • 支持输入任意正整数天数
    • 显示完整日期格式(年月日+星期几)
    • 例如:"从今天开始30天后是:2025年5月1日星期四"
    • 输入验证确保只接受有效数字
    • 结果加粗显示更醒目


其他特点
  • 响应式设计:适配不同屏幕尺寸
  • 直观界面:卡片式布局,色彩区分不同状态
  • 即开即用:纯前端实现,无需网络连接
  • 数据持久化:自动记住用户最后设置的日期
  • 代码结构清晰:通过将毫秒常量与格式化函数提前定义,提升了代码可维护性。
  • 逻辑简化:加载默认值的逻辑先检查 localStorage,再设置默认值,避免重复覆盖。


这个工具非常适合用于:
  • 重要日子的倒计时(生日、节日、纪念日)
  • 项目截止时间提醒
  • 计算任务完成日期
  • 记录事件已发生的时间长度


注意:所有计算都在本地浏览器完成,保护用户隐私,且代码尽量做到简洁清晰,便于日后扩展和维护。
抛砖引玉,需要增加其他功能的,请自由发挥。


修改本代码发帖,请注明出处。

使用方法:将代码复制到本地文本文档,将后缀改为html可直接运行,也可部署到自己的网站中。
[JavaScript] 纯文本查看 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Easy分享时间间隔统计小工具</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      display: flex;
      flex-direction: column;
      align-items: center;
      min-height: 100vh;
      margin: 0;
      background: #f0f2f5;
    }
    .container {
      text-align: center;
      background: white;
      padding: 2rem;
      border-radius: 10px;
      box-shadow: 0 2px 15px rgba(0,0,0,0.1);
      margin-top: 2rem;
    }
    h1 {
      color: #2c3e50;
      margin-bottom: 2rem;
    }
    .countdown {
      display: flex;
      justify-content: center;
      gap: 2rem;
      margin: 2rem 0;
    }
    .time-box {
      background: #3498db;
      color: white;
      padding: 1rem 2rem;
      border-radius: 8px;
      min-width: 100px;
    }
    .number {
      font-size: 2.5rem;
      font-weight: bold;
    }
    .label {
      font-size: 0.9rem;
      margin-top: 0.5rem;
    }
    #dateInput, #customDaysInput {
      padding: 0.5rem;
      font-size: 1rem;
      margin-bottom: 1rem;
      border: 2px solid #3498db;
      border-radius: 5px;
    }
    .expired {
      color: #e74c3c;
      font-size: 1.5rem;
      font-weight: bold;
    }
    .info {
      margin: 1rem 0;
      font-size: 1.2rem;
      font-weight: bold;
    }
    .custom-days-section {
      margin-top: 2rem;
    }
    .custom-days-info {
      margin-top: 1rem;
      font-size: 1.2rem;
      color: #34495e;
    }
    button {
      padding: 0.5rem 1rem;
      background: #3498db;
      color: white;
      border: none;
      border-radius: 5px;
      cursor: pointer;
      font-size: 1rem;
    }
    button:hover {
      background: #2980b9;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>时间间隔统计小工具</h1>
    
    <!-- 日期输入框 -->
    <input type="datetime-local" id="dateInput" required>
    
    <!-- 时间状态提示信息 -->
    <div id="info" class="info"></div>
    
    <!-- 倒计时显示 -->
    <div class="countdown">
      <div class="time-box">
        <div class="number" id="years">00</div>
        <div class="label">年</div>
      </div>
      <div class="time-box">
        <div class="number" id="months">00</div>
        <div class="label">月</div>
      </div>
      <div class="time-box">
        <div class="number" id="days">00</div>
        <div class="label">天</div>
      </div>
      <div class="time-box">
        <div class="number" id="hours">00</div>
        <div class="label">时</div>
      </div>
      <div class="time-box">
        <div class="number" id="minutes">00</div>
        <div class="label">分</div>
      </div>
      <div class="time-box">
        <div class="number" id="seconds">00</div>
        <div class="label">秒</div>
      </div>
    </div>
    
    <div id="message" class="expired"></div>

    <!-- 自定义天数计算功能 -->
    <div class="custom-days-section">
      <h2>未来天数计算</h2>
      <input type="number" id="customDaysInput" placeholder="请输入天数" required>
      <button id="calculateCustomDays">计算</button>
      <div id="customDaysInfo" class="custom-days-info"></div>
    </div>
  </div>

  <script>
    document.addEventListener('DOMContentLoaded', () => {
      const dateInput = document.getElementById('dateInput');
      const infoElement = document.getElementById('info');
      const yearsElement = document.getElementById('years');
      const monthsElement = document.getElementById('months');
      const daysElement = document.getElementById('days');
      const hoursElement = document.getElementById('hours');
      const minutesElement = document.getElementById('minutes');
      const secondsElement = document.getElementById('seconds');
      
      const customDaysInput = document.getElementById('customDaysInput');
      const calculateCustomDaysButton = document.getElementById('calculateCustomDays');
      const customDaysInfoElement = document.getElementById('customDaysInfo');

      // 常量定义(毫秒)
      const MS_IN_YEAR = 1000 * 60 * 60 * 24 * 365;
      const MS_IN_MONTH = 1000 * 60 * 60 * 24 * 30;
      const MS_IN_DAY = 1000 * 60 * 60 * 24;
      const MS_IN_HOUR = 1000 * 60 * 60;
      const MS_IN_MINUTE = 1000 * 60;

      // 封装数字格式化函数
      const pad = num => num.toString().padStart(2, '0');

      // 先尝试加载保存的时间
      const savedDate = localStorage.getItem('countdownDate');
      if (savedDate) {
        dateInput.value = savedDate;
      } else {
        // 如果没有保存,则默认设置为昨天此时
        const defaultDate = new Date();
        defaultDate.setDate(defaultDate.getDate() - 1);
        dateInput.value = defaultDate.toISOString().slice(0, 16);
      }

      const updateCountdown = () => {
        const targetDate = new Date(dateInput.value);
        const now = new Date();
        const diff = Math.abs(targetDate - now);

        // 更新提示信息
        if (targetDate > now) {
          infoElement.textContent = "距离目标时间还剩:";
          infoElement.style.color = "#2ecc71";
        } else {
          infoElement.textContent = "从目标时间到现在已过:";
          infoElement.style.color = "#e74c3c";
        }

        const years = Math.floor(diff / MS_IN_YEAR);
        const remainingAfterYears = diff % MS_IN_YEAR;
        const months = Math.floor(remainingAfterYears / MS_IN_MONTH);
        const remainingAfterMonths = remainingAfterYears % MS_IN_MONTH;
        const days = Math.floor(remainingAfterMonths / MS_IN_DAY);
        const hours = Math.floor((remainingAfterMonths % MS_IN_DAY) / MS_IN_HOUR);
        const minutes = Math.floor((remainingAfterMonths % MS_IN_HOUR) / MS_IN_MINUTE);
        const seconds = Math.floor((remainingAfterMonths % MS_IN_MINUTE) / 1000);

        yearsElement.textContent = pad(years);
        monthsElement.textContent = pad(months);
        daysElement.textContent = pad(days);
        hoursElement.textContent = pad(hours);
        minutesElement.textContent = pad(minutes);
        secondsElement.textContent = pad(seconds);
      };

      // 定时更新
      updateCountdown();
      setInterval(updateCountdown, 1000);

      // 日期输入改变时保存用户选择
      dateInput.addEventListener('change', () => {
        localStorage.setItem('countdownDate', dateInput.value);
      });

      // 自定义天数计算
      calculateCustomDaysButton.addEventListener('click', () => {
        const customDays = parseInt(customDaysInput.value, 10);
        if (isNaN(customDays) || customDays <= 0) {
          customDaysInfoElement.textContent = "请输入有效的正整数天数!";
          return;
        }
        const now = new Date();
        const targetDate = new Date(now.getTime() + customDays * MS_IN_DAY);
        const formattedDate = new Intl.DateTimeFormat('zh-CN', {
          year: 'numeric',
          month: 'long',
          weekday: 'long',
          day: 'numeric'
        }).format(targetDate);
        customDaysInfoElement.textContent = `从今天开始 ${customDays} 天后是:${formattedDate}`;
        customDaysInfoElement.style.fontWeight = "bold";
        customDaysInfoElement.style.color = "#2c3e50";
      });
    });
  </script>
</body>
</html>


预览图




免费评分

参与人数 6吾爱币 +10 热心值 +5 收起 理由
Planner + 1 + 1 热心回复!
dg5988143 + 1 我很赞同!
fhlfxtd + 1 + 1 我很赞同!
ai6575547 + 1 + 1 谢谢@Thanks!
kuku20009 + 1 + 1 我很赞同!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
 楼主| 思念是因为你 发表于 2025-4-1 17:22 |楼主
免费评分时,希望大家能让我    热心值 +1
谢谢各位
3#
robert1234 发表于 2025-4-8 08:45
4#
ssh66888 发表于 2025-5-14 13:58
5#
fhlfxtd 发表于 2025-5-14 15:13
感谢分享,支持!
6#
wanyimin 发表于 2025-5-17 09:48
可以大佬   
7#
wcb_66299 发表于 2025-7-9 16:43
终于找到可以用的了
8#
serpentking 发表于 2025-7-9 22:44
不错,比计算器块。
9#
yann2009 发表于 2025-7-23 11:51
很好用,如果界面再美观一些,就更好了
10#
smxone 发表于 2025-12-25 19:14
下载了试试看看效果怎末样。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-7-9 07:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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