当前位置: 首页 > ds >正文

JavaScript中Date对象用法详解

在 JavaScript 中,Date 对象用于处理日期和时间。以下是其核心用法详解:


一、创建 Date 对象

方式示例说明
当前时间new Date()返回当前日期和时间(本地时区)
时间戳new Date(timestamp)参数为毫秒数(自 1970-01-01 00:00:00 UTC 起)
日期字符串new Date("2024-06-15T13:45:30")支持 ISO 8601 格式(推荐)或其他可解析格式(如 "June 15, 2024"
年月日时分秒new Date(2024, 5, 15, 13, 45, 30)注意:月份从 0 开始(0=1月),参数范围:年, 月, 日, 时, 分, 秒, 毫秒

二、常用方法

1. 获取时间分量(本地时区)

javascript

复制

下载

const date = new Date();
date.getFullYear();  // 年份(4位数)
date.getMonth();     // 月份(0-11,0=1月)
date.getDate();      // 日期(1-31)
date.getHours();     // 小时(0-23)
date.getMinutes();   // 分钟(0-59)
date.getSeconds();   // 秒(0-59)
date.getMilliseconds(); // 毫秒(0-999)
date.getDay();       // 星期几(0-6,0=周日)
2. 获取时间分量(UTC 时区)

javascript

复制

下载

date.getUTCFullYear();  // UTC 年份
date.getUTCMonth();     // UTC 月份(0-11)
// 其他方法类似,如 getUTCHours() 等
3. 设置时间分量

javascript

复制

下载

date.setFullYear(2025); // 设置年份
date.setMonth(11);      // 设置月份(11=12月)
// 其他方法类似,如 setHours(23) 等
4. 时间戳与转换

javascript

复制

下载

date.getTime();         // 返回时间戳(毫秒)
date.valueOf();         // 同上(常用于比较)
Date.now();             // 当前时间戳(静态方法)
5. 格式化输出

javascript

复制

下载

date.toString();        // 完整日期时间字符串(本地时区)
date.toISOString();     // ISO 8601 格式(UTC 时区,如 "2024-06-15T05:45:30.000Z")
date.toLocaleString();  // 本地化格式(可配置语言和选项)
date.toDateString();    // 日期部分(如 "Sat Jun 15 2024")

三、关键注意事项

  1. 月份从 0 开始
    0 表示一月,11 表示十二月。

  2. 时区差异
    new Date() 和 get*() 方法默认使用本地时区,toISOString() 和 getUTC*() 使用 UTC。

  3. 日期解析风险
    避免使用 new Date("非标准字符串")(如 "2024-06-15" 在某些旧浏览器中被视为 UTC 而非本地时间)。推荐:

    javascript

    复制

    下载

    // 安全解析 ISO 格式或使用具体参数
    new Date("2024-06-15T00:00:00"); // 明确指定时间部分
  4. 比较日期
    使用时间戳比较更可靠:

    javascript

    复制

    下载

    const date1 = new Date(2024, 5, 15);
    const date2 = new Date(2024, 5, 20);
    if (date1.getTime() < date2.getTime()) { ... }

四、实用示例

1. 计算日期差(天)

javascript

复制

下载

const start = new Date(2024, 5, 15);
const end = new Date(2024, 5, 20);
const diffDays = Math.floor((end - start) / (1000 * 60 * 60 * 24)); // 5
2. 格式化日期

javascript

复制

下载

function formatDate(date) {return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
}
formatDate(new Date()); // "2024-06-15"
3. 验证日期有效性

javascript

复制

下载

function isValidDate(date) {return date instanceof Date && !isNaN(date);
}
isValidDate(new Date("invalid")); // false

五、常见问题

Q:为什么 new Date(2024, 0, 32) 返回 2 月 1 日?
A:日期自动溢出(1 月 32 日 = 2 月 1 日)。

Q:如何获取 UTC 时间戳?
A:使用 date.getTime() 或 Date.UTC()

javascript

复制

下载

const utcTimestamp = Date.UTC(2024, 5, 15); // 返回 UTC 时间戳

掌握这些核心用法后,可高效处理 JavaScript 中的日期与时间操作!

在 JavaScript 中,直接调用 Date('2025-06-08')没有使用 new 关键字)会返回一个表示当前日期和时间的字符串,而不会解析传入的参数!这是常见误区。

具体行为:

javascript

复制

下载

const result = Date('2025-06-08');
console.log(result); 
// 输出类似:"Mon Jun 15 2025 14:30:25 GMT+0800 (中国标准时间)"
// ⚠️ 注意:结果是执行代码时的当前时间,不是 2025-06-08!

关键区别:

调用方式返回值类型是否解析参数实际效果
Date('2025-06-08')string❌ 否返回当前时间的字符串表示
new Date('2025-06-08')Date对象✅ 是解析参数为指定日期

正确用法:

javascript

复制

下载

// ✅ 正确:使用 new 创建 Date 对象
const dateObj = new Date('2025-06-08');
console.log(dateObj); // 2025-06-08T00:00:00.000Z (UTC时间)// ✅ 获取本地时间字符串
console.log(dateObj.toLocaleString()); // "2025/6/8 08:00:00" (北京时间,UTC+8)

重要细节:

  1. 时区陷阱

    javascript

    复制

    下载

    new Date('2025-06-08').toISOString() // "2025-06-08T00:00:00.000Z" (UTC)
    • ISO 字符串末尾的 Z 表示 UTC 时间

    • 在中国时区 (UTC+8),这相当于本地时间 2025-06-08 08:00:00

  2. 安全解析建议

    javascript

    复制

    下载

    // 避免跨浏览器差异,推荐显式指定时间
    new Date('2025-06-08T00:00:00+08:00') // 明确北京时间

总结:

  • Date() 函数调用 → 返回当前时间字符串(忽略参数)

  • new Date() 构造函数 → 创建日期对象(解析参数)

要正确解析日期字符串,必须使用 new Date()

在 JavaScript 中,给日期增加天数可以通过 Date 对象的 setDate() 方法实现。以下是几种实现方式:

方法 1:使用 setDate()(推荐)

javascript

复制

下载

// 创建日期对象
const date = new Date('2025-06-08');// 天数加 1
date.setDate(date.getDate() + 1);console.log(date.toISOString().split('T')[0]); // "2025-06-09"

方法 2:使用时间戳(毫秒数)

javascript

复制

下载

const date = new Date('2025-06-08');
const newDate = new Date(date.getTime() + 24 * 60 * 60 * 1000); // 添加 1 天的毫秒数console.log(newDate.toISOString().split('T')[0]); // "2025-06-09"

方法 3:创建工具函数

javascript

复制

下载

function addDays(date, days) {const result = new Date(date);result.setDate(result.getDate() + days);return result;
}// 使用示例
const date = new Date('2025-06-08');
const newDate = addDays(date, 1); // 加 1 天
console.log(newDate.toISOString().split('T')[0]); // "2025-06-09"

重要注意事项:

  1. 自动处理跨月/跨年

    javascript

    复制

    下载

    const date = new Date('2025-06-30');
    date.setDate(date.getDate() + 2);
    console.log(date.toISOString().split('T')[0]); // "2025-07-02"
  2. 时区问题

    • new Date('2025-06-08') 会被解析为 UTC 时间

    • 在中国时区 (UTC+8) 会显示为 6 月 8 日 08:00

    • 加 1 天后,在 UTC 时间会变成 6 月 9 日 00:00

  3. 避免修改原对象

    javascript

    复制

    下载

    // 正确做法:创建新对象
    function safeAddDays(date, days) {const newDate = new Date(date); // 复制原对象newDate.setDate(newDate.getDate() + days);return newDate;
    }

格式化输出:

javascript

复制

下载

function formatDate(date) {return [date.getFullYear(),String(date.getMonth() + 1).padStart(2, '0'),String(date.getDate()).padStart(2, '0')].join('-');
}const newDate = addDays(new Date('2025-06-08'), 1);
console.log(formatDate(newDate)); // "2025-06-09"

处理月末日期示例:

javascript

复制

下载

// 处理 2025 年 1 月 31 日加 1 天
const date = new Date(2025, 0, 31); // 2025-01-31
date.setDate(date.getDate() + 1);
console.log(formatDate(date)); // "2025-02-01"

总结:推荐使用 setDate() 方法,因为它会自动处理月份和年份的变化,是最简单可靠的方式。使用 setDate(date.getDate() + N) 可以轻松加减任意天数。

http://www.xdnf.cn/news/14580.html

相关文章:

  • 深入实践Caffeine+Redis两级缓存架构:从原理到高可用设计
  • 「Linux文件及目录管理」文件及目录操作类命令
  • Grdle版本与Android Gradle Plugin版本, Android Studio对应关系
  • OpenWrt:交叉编译openssl
  • redis缓存的基础知识
  • DBSCAN(Density-Based Spatial Clustering of Applications with Noise)基于密度的聚类方法介绍
  • 移动应用开发实验室web组大一下期末考核题解
  • 【arXiv2024】时间序列|TimesFM-ICF:即插即用!时间序列预测新王者!吊打微调!
  • 如何用ai设计测试
  • WebStorm编辑器侧边栏
  • NodeJS的fs模块的readFile和createReadStream区别以及常见方法
  • Nacos 实战指南:服务注册、分级与环境隔离
  • 第二十六周:序列化和反序列化
  • 变幻莫测:CoreData 中 Transformable 类型面面俱到(三)
  • 【Git】代码托管服务
  • 【一天一个知识点】RAG 是“问答脑”,智能体是“有行动力的大脑”
  • AndroidStudio下载的SDK没有tool目录,或者想要使用uiautomatorviewer工具
  • 二.TvSettings从Android.bp解析成build.gradle
  • 计量经济学知识点总结与练习题(2025年)
  • gradle的 build时kaptDebugKotlin 处理数据库模块
  • Maven之初识与安装
  • Adobe 发布 Android 版 Photoshop(目前免费测试)
  • WebRTC(四):STUN协议
  • PostgreSQL - Windows 中 PostgreSQL 禁用开机自启,并在需要时手动启动
  • 安卓9.0系统修改定制化____安卓 9.0 解包、打包与系统修改基础及工具介绍 常识篇 四
  • React 动态路由的使用和实现原理
  • 案例:塔能科技智启某市“光网计划”——重构城市照明的数字底座与生态价值
  • Android 多 BaseUrl 动态切换策略(结合 ServiceManager 实现)
  • 微信小程序使用computed
  • XR-RokidAR-ADB环境搭建