首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript 日期選組件:獲取當前日期並實現加減天數顯示

     編輯:程式設計疑難解答

核心需求

  • 頁面載入自動顯示今天日期(格式:YYYYMMDD)
  • 點擊「+」按鈕日期 +1 天,「-」按鈕日期 -1 天
  • 結果即時顯示在 <input type="text"> 中

完整可運行示例

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
  <meta charset="UTF-8">
  <title>日期加減示例</title>
  <style>
    .controls { margin-top: 10px; }
    button { padding: 5px 15px; margin-right: 5px; cursor: pointer; }
    input { padding: 5px; font-family: monospace; }
  </style>
</head>
<body>
  <input type="text" id="dateDisplay" readonly style="width: 120px;" />
  <div class="controls">
    <button id="btnSub">- 1 天</button>
    <button id="btnAdd">+ 1 天</button>
  </div>

  <script>
    // 使用 Date 物件操作,避免字串拼接錯誤
    let currentDate = new Date(); // 當地時間 00:00:00

    // 格式化為 YYYYMMDD
    function formatDate(d) {
      const y = d.getFullYear();
      const m = String(d.getMonth() + 1).padStart(2, '0');
      const day = String(d.getDate()).padStart(2, '0');
      return `${y}${m}${day}`;
    }

    function updateDisplay() {
      document.getElementById('dateDisplay').value = formatDate(currentDate);
    }

    // 綁定事件
    document.getElementById('btnAdd').addEventListener('click', () => {
      currentDate.setDate(currentDate.getDate() + 1);
      updateDisplay();
    });

    document.getElementById('btnSub').addEventListener('click', () => {
      currentDate.setDate(currentDate.getDate() - 1);
      updateDisplay();
    });

    // 初始化
    updateDisplay();
  </script>
</body>
</html>

關鍵點解析

  1. 用 Date 物件而非字串運算:setDate(getDate() ± 1) 自動處理月份跨越、閏年、年底跨年等邊界情況。
  2. 格式化函數:padStart(2,'0') 確保月、日兩位數。
  3. 事件綁定用 addEventListener:優於內聯 onclick,結構與行為分離。
  4. 唯讀輸入框:防止用戶手動輸入非法格式。

進階擴展建議

  • 改用 <input type="date"> 獲得原生日期選擇器(瀏覽器支援良好)。
  • 引入 Day.js (2KB) 或 date-fns 處理複雜格式、國際化、時區。
  • 加入鍵盤快捷鍵(←/→ 或 ↑/↓)控制日期。
  • 若需指定時區(如 UTC),使用 getUTCFullYear() 等方法。
避坑指南:不要嘗試手動拼接字串計算日期(如 myDate++),會導致「20231232」這類非法值。永遠信任 Date 物件的內建邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved