讲师中心 微信公众号
AI工具推荐 视频效率加速

javascript如何格式化日期_怎样将日期转换为特定字符串?

浅杰吖_9705

浅杰吖_9705

发布时间:2026-01-11 09:22:02

|

690人浏览过

|

来源于php中文网

原创

toLocaleDateString()可自动适配本地语言和时区,比手动拼接更可靠;需校验日期有效性,支持locale和选项精细控制;固定格式首选Intl.DateTimeFormat;注意getMonth()陷阱及时区问题。

javascript如何格式化日期_怎样将日期转换为特定字符串?

用 toLocaleDateString() 快速生成本地化日期字符串

多数场景下不需要手写格式逻辑,toLocaleDateString() 能自动适配用户系统语言和时区,且支持细粒度控制字段。它比拼接 getFullYear() + getMonth() 更可靠,尤其涉及多语言或夏令时切换时。

常见错误是传入 undefined 或无效 Date 实例导致返回 "Invalid Date";务必先校验:

const d = new Date('2024-09-15');
if (isNaN(d.getTime())) {
  throw new Error('Invalid date');
}

  • 只想要年月日?用 { year: 'numeric', month: '2-digit', day: '2-digit' } → "2024/09/15"(中文系统)或 "09/15/2024"(美式)
  • 要英文缩写月份?加 month: 'short' → "Sep 15, 2024"
  • 想强制中文格式不随系统变?指定 locale: 'zh-CN',但注意:某些旧版 Safari 不支持该参数

用 Intl.DateTimeFormat 精确控制分隔符和顺序

当设计稿明确要求 "2024-09-15" 或 "15/09/2024" 这类固定格式,且不能受用户系统影响时,Intl.DateTimeFormat 是更稳妥的选择。它比正则替换或手动拼接更健壮,也避免了 getMonth() 返回 0~11 导致的常见 off-by-one 错误。

关键点:必须显式设置 year、month、day 的 format 值,否则可能缺失字段:

const formatter = new Intl.DateTimeFormat('en-CA', {
  year: 'numeric',
  month: '2-digit',
  day: '2-digit'
});
console.log(formatter.format(new Date('2024-09-15'))); // "2024-09-15"
  • 'en-CA' 输出 YYYY-MM-DD,'en-GB' 输出 DD/MM/YYYY
  • 不支持自定义分隔符(如 2024.09.15),得靠 formatToParts() 拆解后拼接
  • Node.js 14+ 和现代浏览器都支持,但 IE 完全不兼容

手写格式化函数时绕开 getMonth() 的陷阱

直接调 date.getMonth() + 1 看似简单,但容易在边界情况出错:比如 new Date(2024, 0, 0) 是 2023 年 12 月 31 日,getMonth() 返回 11,此时 +1 就变成 12——而月份只有 0–11。

GitHub & Developer Data
GitHub & Developer Data

面向AI代理的GitHub及开发者数据——仓库元数据(星标、语言、许可证)、仓库审计与风险评分、用户资料、最新发布和gist内容...

下载

立即学习“Java免费学习笔记(深入)”;

更安全的做法是用 getDate() / getMonth() 配合 String.prototype.padStart():

function formatDate(date) {
  const y = date.getFullYear();
  const m = String(date.getMonth() + 1).padStart(2, '0');
  const d = String(date.getDate()).padStart(2, '0');
  return `${y}-${m}-${d}`;
}
  • 永远对 getMonth() + 1 和 getDate() 做 padStart(2, '0'),别信“不会小于10”
  • 不要用 date.toString().slice(0, 15) 这类取巧方式——不同引擎返回格式不一致
  • 如果输入可能是字符串,先用 new Date(input) 构造,再用 isNaN(date.getTime()) 判定有效性

时间戳转日期字符串要注意时区偏移

后端常返回毫秒时间戳(如 1726387200000),直接传给 new Date(timestamp) 会按本地时区解析。若接口约定为 UTC 时间,却用本地时间渲染,会导致白天显示成前一天。

正确做法分两种:

  • 要显示用户本地时间?直接 new Date(timestamp),然后用前述任意方法格式化
  • 要严格按 UTC 显示?用 new Date(timestamp).toUTCString() 或 toISOString().slice(0, 10)(仅日期部分)
  • 警惕 new Date('2024-09-15').getTime() 在 Safari 中可能返回 NaN,因 ISO 格式字符串未带时间部分时行为不统一;补上 T00:00 更稳
日期格式化真正麻烦的不是语法,而是隐式时区转换和跨浏览器解析差异。哪怕只是输出 YYYY-MM-DD,也要先确认:这个日期是用户本地时间?服务端 UTC 时间?还是某个固定时区的时间?选错起点,后面所有格式都可能错位。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6819

2023.08.02

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1789

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1211

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1818

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2884

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6204

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6029

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7634

2024.03.22

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn