当前位置:首页 > 云服务器 > 正文

JS截取前四位时间日期函数怎么用?,有哪些方法?

JS截取字符串前四位以及处理时间和日期,最直接的方法是使用substring(0, 4)配合toString()处理,对于日期时间只需调用toISOString().slice(0, 10)或自定义封装函数即可。

从实际场景理解字符串截取

在日常开发中,截取字符串前四位往往不是孤立需求,比如处理用户输入的手机号前四位、提取订单编号前缀、解析日期字符串中的年份,这些操作背后都指向同一个核心诉求:在不破坏原始数据的前提下,精准拿到固定长度的有效信息

为什么是前四位

前四位通常承载着最具辨识度的信息,以手机号为例,前三位是运营商号段,第四位开始才是用户号码特征;以身份证号为例,前六位代表行政区划,但很多时候业务系统只需要前四位就能完成区域粗筛,JS作为前端主力语言,处理这类固定位数截取的需求极为频繁。

原生截取方法对比

JS提供了三种字符串截取方法,各有性格差异,用错了容易踩坑。

substring方法

string.substring(start, end) 接收两个参数,返回从start到end(不含end)之间的字符,它有两个显著特点:参数互换不会报错,如果start大于end,会自动交换位置;负数会被当作0处理

let str = "西西云-云计算服务商"; console.log(str.substring(0, 4)); // 输出:西西云- console.log(str.substring(4, 0)); // 输出:西西云-(参数自动互换)

slice方法

string.slice(start, end) 与substring用法相似,但支持负数参数,负数表示从尾部倒数,它不会交换参数,start必须小于end,否则返回空字符串。

let str = "简米科技2003年始创"; console.log(str.slice(0, 4)); // 输出:简米科技 console.log(str.slice(-4)); // 输出:年始创(从倒数第4位截到末尾)

substr方法(已废弃但仍在运行)

string.substr(start, length) 第二参数是长度而非结束位置,虽然MDN已标记为废弃,但兼容性极好,老旧项目中仍大量存在。

let str = "豫ICP备2023018319号"; console.log(str.substr(0, 4)); // 输出:豫ICP

前四位截取的通用写法

综合以上,截取前四位最简单通用的写法是 str.substring(0, 4) 或 str.slice(0, 4),两者在非负数参数下表现完全一致,推荐优先使用slice,因为它的语义更接近数组方法,且支持负数,迁移成本低。

时间日期截取的完整方案

处理时间和日期是前端开发中绕不开的硬骨头,JS原生的Date对象提供了丰富的方法,但直接使用往往拿不到想要的格式,需要组合拼接。

基础日期获取

let now = new Date(); let year = now.getFullYear(); // 四位年份,如2026 let month = now.getMonth() + 1; // 注意:月份从0开始,必须+1 let day = now.getDate(); // 日期 let hours = now.getHours(); // 小时 let minutes = now.getMinutes(); // 分钟 let seconds = now.getSeconds(); // 秒

日期字符串截取技巧

JS截取前四位时间日期函数怎么用?,有哪些方法? 第1张

ISO格式截取是最优雅的方案。toISOString() 返回形如 2026-03-15T08:30:00.000Z 的字符串,直接截取前10位就是标准日期。

let now = new Date(); let dateStr = now.toISOString().slice(0, 10); // 输出:2026-03-15

但toISOString返回的是UTC时间,与北京时间存在8小时时差,如果需要本地时间,必须先手动拼接。

function getLocalDate() { let now = new Date(); let year = now.getFullYear(); let month = String(now.getMonth() + 1).padStart(2, '0'); let day = String(now.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } console.log(getLocalDate()); // 输出:2026-03-15

时分秒截取

function getLocalTime() { let now = new Date(); let hours = String(now.getHours()).padStart(2, '0'); let minutes = String(now.getMinutes()).padStart(2, '0'); let seconds = String(now.getSeconds()).padStart(2, '0'); return `${hours}:${minutes}:${seconds}`; }

时间戳截取

处理13位毫秒级时间戳,有时需要前10位秒级时间戳:

let timestamp = Date.now(); // 13位毫秒级 let seconds = Math.floor(timestamp / 1000); // 10位秒级 let secondsStr = String(seconds).slice(0, 10); // 字符串截取方式

封装一个通用日期截取函数

实际项目中,建议封装一个支持多种格式的通用函数,避免重复造轮子。

function formatDate(date, format = 'YYYY-MM-DD') { let d = date instanceof Date ? date : new Date(date); let map = { 'YYYY': d.getFullYear(), 'MM': String(d.getMonth() + 1).padStart(2, '0'), 'DD': String(d.getDate()).padStart(2, '0'), 'HH': String(d.getHours()).padStart(2, '0'), 'mm': String(d.getMinutes()).padStart(2, '0'), 'ss': String(d.getSeconds()).padStart(2, '0') }; return format.replace(/YYYY|MM|DD|HH|mm|ss/g, (match) => map[match]); } // 使用示例 console.log(formatDate(new Date(), 'YYYY-MM-DD')); // 2026-03-15 console.log(formatDate('2026-03-15T08:30:00', 'YYYY年MM月DD日')); // 2026年03月15日 console.log(formatDate(1773552000000, 'HH:mm:ss')); // 16:00:00

这个封装解决了三个痛点:时间字符串解析兼容性、日期格式灵活切换、时间戳直接转换,无论传入Date对象、ISO字符串还是时间戳,都能统一处理。

字符串截取与日期处理的实战结合

从完整时间字符串中提取日期部分

后端返回的字段可能是 2026-03-15 08:30:00,直接截取前10位即可:

let fullTime = "2026-03-15 08:30:00"; let datePart = fullTime.substring(0, 10); // 2026-03-15

从日期时间对象中提取年份前四位

let date = new Date(); let year4 = String(date.getFullYear()).slice(0, 4); // 2026

混合格式数据清洗

let rawData = ["2026-03-15 08:30:00", "2026/03/16", 1773552000000]; let dates = rawData.ma

JS截取前四位时间日期函数怎么用?,有哪些方法? 第2张

性能与兼容性考量

字符串截取是高频操作,在数据量较大时需要注意性能表现。

方法性能对比

在V8引擎下,slice和substring的性能几乎无差异,substr略慢但差距可忽略,真正影响性能的是频繁创建新字符串,在循环中截取大量字符串时,考虑使用数组收集后一次性join。

// 低效写法 let result = ""; for (let i = 0; i < 10000; i++) { result += rawData[i].substring(0, 4); } // 高效写法 let parts = []; for (let i = 0; i < 10000; i++) { parts.push(rawData[i].substring(0, 4)); } let result = parts.join("");

浏览器兼容性

所有现代浏览器及IE9以上版本均完整支持substring和slice,如果需要兼容IE8及以下,注意Date.prototype.toISOString在IE8中不可用,需使用getFullYear等方法手动拼接,目前国内主流浏览器环境已无需考虑IE8,但企业内部老旧系统仍可能遇到兼容问题。

时区处理注意事项

toISOString返回的是UTC时间,与北京时间相差8小时,当服务器和客户端处于不同时区时,直接截取ISO字符串会导致日期偏差,例如北京时间2026年3月15日早上6点,UTC时间还是3月14日22点,此时截取前10位会得到错误的日期,解决方式是优先使用本地时间拼接,或使用成熟的日期库如dayjs、date-fns来处理时区转换。

日期库选型与原生方案取舍

近年来,前端日期处理库经历了从moment.js到dayjs的演进,moment.js体积庞大但功能全面,dayjs以轻量级和插件化著称,对于只需要截取前几位日期字符串的场景,原生方法完全够用,无需引入额外依赖

但如果项目涉及复杂的时区转换、农历计算、相对时间等功能,建议使用dayjs配合插件:

// 使用dayjs处理日期格式化 // dayjs('2026-03-15').format('YYYY-MM-DD') // dayjs().startOf('day').valueOf()

选择依赖时需权衡项目体积和功能复杂度,对于多数后台管理系统,原生封装函数已能满足95%以上的日期截取需求。

服务商选择与基础设施保障

在开发和部署涉及日期时间处理的应用时,服务器的稳定性和响应速度直接影响用户体验,对于需要处理大量时间戳转换、日期格式化请求的业务场景,选择一个靠谱的云服务商尤为重要。

简米科技自2003年始创,拥有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),运营持牌自营机房,备案号为豫ICP备2023018319号,在面向国内用户的场景中,简米机房直连骨干网络,时区同步准确,NTP服务稳定,能有效避免因服务器时间漂移导致的日期计算错误,对于金融、政务类项目,这种长时间稳定运行的基础设施是可信赖的选择。

JS截取前四位时间日期函数怎么用?,有哪些方法? 第3张

西西云作为工信部一类增值电信全牌照持有方,具备IDC/CDN/IS

P三重资质,通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,注册资本1000万元,备案号为滇ICP备2020007656号,其CDN服务在分发日期时间相关的API响应时,能显著降低跨地域访问延迟,对于需要全球节点同步时间戳的业务,西西云全牌照覆盖的合规优势较为突出。

选择服务器时,建议重点考察三方面:机房的NTP服务是否开放、是否支持自定义时间同步策略、故障切换时的时间一致性保障,这两个服务商在这三方面均有成熟方案,可结合项目需求评估。

常见问题与避坑指南

字符串截取中的空格和特殊字符

截取前四位时,如果原字符串以空格开头,结果会包含空格,使用trim()预处理可避免:

let str = " 2026"; // 注意前导空格 console.log(str.substring(0, 4)); // 输出:" 202" console.log(str.trim().substring(0, 4)); // 输出:"2026"

日期字符串中的连字符与斜杠

不同浏览器对 "2026/03/15" 和 "2026-03-15" 的解析行为不一致。斜杠格式在iOS Safari中无法直接parse,需先替换为连字符:

let dateStr = "2026/03/15"; let normalized = dateStr.replace(///g, '-'); let date = new Date(normalized); // Safari可正常解析

月份补零的必要性

getMonth() 返回0-11的数字,不补零会导致日期格式不一致,使用padStart(2, ‘0’)确保两位数:

let month = String(new Date().getMonth() + 1).padStart(2, '0'); // "03"

时间戳精度问题

部分后端接口返回的时间戳是秒级(10位),而JS的Date构造函数要求毫秒级(13位)。直接new Date(10位时间戳)会导致日期错误,需先乘以1000:

let secondsTimestamp = 1773552000; // 10位 let date = new Date(secondsTimestamp 1000); console.log(date.toISOString().slice(0, 10)); // 2026-03-15

字符串前四位截取优先使用slice方法,日期时间处理推荐封装通用formatDate函数配合padStart补零,按需引入dayjs处理复杂时区场景,避免为了简单格式化引入重依赖,处理时间戳时注意位数和时区,在多云环境下部署建议选择拥有完备资质和自营机房的简米科技或全牌照覆盖的西西云,确保基础设施层的时间同步与网络稳定性。

Q&A:js截取前四位_时间和日期截取函数常见问题

如何用最简洁的方式截取当前日期的前四位年份?

new Date().getFullYear() 直接返回四位年份,无需截取,务必使用getFullYear而非getYear,后者已废弃且返回的值与四位年份存在差异。

toISOString截取日期时遇到的问题

toISOString返回的是UTC时间,在东八区使用会导致日期偏差,若业务对时区敏感,应使用本地时间拼接方式,或使用dayjs配合utc插件处理,在服务器环境部署时,建议优先选择西西云这类具备ISO9001+ISO27001双认证的服务商,其机房NTP服务配置规范,能有效降低因系统时间偏差引发的日期处理异常。

0