您好!欢迎访问家园网-www.jy.wang!

家园网

如何让显示的时间为2位数字,而不是10:7:21之类的,有显示2位的date方法吗

网络 作者:本站 点击:

JavaScript 的 Date 对象本身‌没有‌直接返回“两位数格式”字符串的方法(例如 getHours() 永远返回数字 0-23,而不是字符串 "09")。

要实现 10:07:21 这种效果,必须对获取到的数字进行‌格式化补零‌。以下是三种最常用且简洁的方法:

方法一:使用 padStart()(推荐,现代写法)

这是目前最标准、代码最简洁的方式。将数字转为字符串后,如果长度不足2位,则在前面补 0

var now = new Date();
var hour = String(now.getHours()).padStart(2, '0');    // "09" 或 "10"
var minute = String(now.getMinutes()).padStart(2, '0'); // "07"
var second = String(now.getSeconds()).padStart(2, '0'); // "05"
console.log(hour + ":" + minute + ":" + second); // 输出例如: 10:07:05

方法二:使用三元运算符(兼容性好)

判断数字是否小于10,如果是,手动拼接一个 "0"

var now = new Date();
var h = now.getHours();
var m = now.getMinutes();
var s = now.getSeconds();
// 如果小于10,前面加"0",否则保持原样(并转为字符串以防类型混合)
var hour = h < 10 ? "0" + h : h;
var minute = m < 10 ? "0" + m : m;
var second = s < 10 ? "0" + s : s;
console.log(hour + ":" + minute + ":" + second);

方法三:使用 toLocaleTimeString()(最省事,但格式受系统影响)

如果你不需要自定义格式(如“年-月-日”),只想快速得到本地化的时间字符串,可以直接使用这个方法。它会自动处理补零和上午/下午标记。

var now = new Date();
// 返回类似 "10:07:05" 或 "上午10:07:05" (取决于浏览器和系统设置)
var timeString = now.toLocaleTimeString('zh-CN', { hour12: false }); 
console.log(timeString);

注意:hour12: false 强制使用24小时制。如果不加这个选项,在某些系统上可能会显示为 "上午10:07:05"。


修改你之前的代码

结合你之前的代码,建议采用‌方法一‌进行修改,既清晰又规范:

<script>
    var now = new Date();
    var year = now.getFullYear();
    // 月份和日期也建议补零,保持美观,如 2026-08-05
    var month = String(now.getMonth() + 1).padStart(2, '0');
    var date = String(now.getDate()).padStart(2, '0');
    
    var day = now.getDay();
    var weekArr = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
    var week = weekArr[day]; // 使用数组映射比 switch 更简洁
    // 时分秒补零
    var hour = String(now.getHours()).padStart(2, '0');
    var minute = String(now.getMinutes()).padStart(2, '0');
    var second = String(now.getSeconds()).padStart(2, '0');
    document.write("<span style='font-size:24px;'>");
    document.write("今天是:" + year + "年" + month + "月" + date + "日 " + week);
    document.write("<br>现在是:" + hour + ":" + minute + ":" + second);
    document.write("</span>");
</script>

主要改进点:

  1. 补零‌:使用了 .padStart(2, '0'),确保 9 变成 09

  2. 星期优化‌:原代码中 switch 写法繁琐且 default 逻辑有误(周日被写成星期一),改用数组 weekArr[day] 更准确且代码更少。

  3. 月份修正‌:getMonth() 返回 0-11,所以必须 +1


详细讲讲这个.padStart




头像







padStart() 是 JavaScript ES2017 (ES8) 引入的一个字符串实例方法,主要用于‌在字符串的头部(左侧)填充字符‌,直到字符串达到指定的长度。

它在处理时间、日期、金额等需要固定宽度的格式化场景中非常有用(例如将 9 变为 09)。

  1. 基本语法

str.padStart(targetLength [, padString])
  • targetLength‌ (必填):

    • 当前字符串需要填充到的‌目标总长度‌。

    • 如果该值小于或等于原字符串的长度,则原样返回字符串,不进行填充。

  • padString‌ (可选):

    • 用于填充的字符串。

    • 默认值‌:空格 " " (U+0020)。

    • 如果提供的填充字符串长度超过所需长度,它会被‌截断‌(只保留左边部分)。

    • 如果提供的填充字符串长度不足,它会‌重复拼接‌直到满足长度要求。

2. 核心用法示例

A. 数字补零(最常用场景)

由于 padStart 是字符串方法,使用前需先将数字转换为字符串。

// 场景:时间格式化,确保两位数
let hour = 9;
let minute = 5;
// 错误写法:数字没有 padStart 方法
// hour.padStart(2, '0') -> 报错
// 正确写法:先转字符串
String(hour).padStart(2, '0');   // "09"
String(minute).padStart(2, '0'); // "05"
// 如果已经是两位数,不会受影响
String(12).padStart(2, '0');     // "12"

B. 默认填充空格

如果不传第二个参数,默认用空格填充,常用于对齐文本。

"abc".padStart(6); 
// 结果: "   abc" (前面有3个空格)

C. 自定义填充字符

可以使用任意字符进行填充。

"abc".padStart(10, "*"); 
// 结果: "&zwnj;*******&zwnj;abc"
"abc".padStart(10, "foo"); 
// 结果: "foofoofabc" 
// 解析:需要填充7位。"foo"重复两次是"foofoo"(6位),再取"foo"的第一个字符"f",共7位。

D. 目标长度小于原长度

如果 targetLength 比原字符串短,字符串保持不变。

"hello".padStart(3, "x"); 
// 结果: "hello" (因为 5 > 3,不处理)

3. 注意事项与细节

  1. 必须作用于字符串‌:
    Number 类型没有 padStart 方法。务必使用 String(num) 或 num.toString() 转换。

// ❌ 报错
5.padStart(2, '0'); 
// ✅ 正确
(5).toString().padStart(2, '0'); 
String(5).padStart(2, '0');

填充字符串的截断逻辑‌:
填充是从左向右进行的。如果填充字符串太长,多余的右侧部分会被丢弃。

"abc".padStart(5, "123456"); 
// 需要填充2位。取"123456"的前两位 "12"。
// 结果: "12abc"

  1. 兼容性‌:

    • padStart 是 ES2017 标准。

    • 现代浏览器‌(Chrome, Firefox, Safari, Edge)均完美支持。

    • IE11 及以下版本不支持‌。如果需要兼容旧版 IE,需要使用 polyfill 或改用传统的三元运算符判断(如 num < 10 ? '0' + num : num)。

4. 对比:padEnd()

  • padStart():在‌开头‌填充(左对齐内容的视觉补充,如时间 09:05)。

  • padEnd():在‌末尾‌填充(右对齐内容的视觉补充,如表格对齐 Name.....)。

5. 实际应用场景代码

结合你之前的时间显示需求,完整的优化代码如下:

var now = new Date();
// 获取各部分数值
var year = now.getFullYear();
var month = now.getMonth() + 1; // 月份从0开始,需+1
var date = now.getDate();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
// 使用 padStart 统一格式化为两位字符串
var strMonth = String(month).padStart(2, '0');
var strDate = String(date).padStart(2, '0');
var strHour = String(hour).padStart(2, '0');
var strMinute = String(minute).padStart(2, '0');
var strSecond = String(second).padStart(2, '0');
// 星期处理
var weekArr = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
var week = weekArr[now.getDay()];
// 输出
console.log(`今天是:${year}年${strMonth}月${strDate}日 ${week}`);
console.log(`现在是:${strHour}:${strMinute}:${strSecond}`);
// 输出示例: 今天是:2026年08月21日 星期五
// 输出示例: 现在是:10:05:03

这种方式比传统的 if (month < 10) month = '0' + month 更简洁、可读性更强,且不易出错。

标签: