You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

string.slice() 不符合预期求助:日期时间字符串截取异常

解决JavaScript中slice()使用-0导致截取空字符串的问题

嘿,我一眼就看出问题出在哪了——你在slice()里用了-0当结束参数,这在JavaScript里可是个容易踩的小坑!

问题根源

JavaScript 里 -0 和 0 是严格相等的(-0 === 0 返回true),而slice(start, end)的核心逻辑是:

  • 如果end的数值小于等于start,会直接返回空字符串
  • 当你传-0时,等同于传了0,比如datept.slice(8, -0)实际是slice(8, 0),起始位置8比结束位置0大,自然拿不到任何内容。

正确的截取方式

你有几种简单的办法来修正这个问题:

  1. 省略结束参数,直接截取到末尾
    当你需要从指定位置截取到字符串最后时,完全不用写第二个参数:

    var day = datept.slice(8); // 得到 "19"
    var minutes = timept.slice(3); // 得到 "05"
    
  2. 使用正索引作为结束位置
    明确写出结束位置的正索引,逻辑更直观:

    var day = datept.slice(8, 10); // "2018-01-19"长度为10,索引8到10对应最后两位
    var minutes = timept.slice(3, 5); // "12:05"长度为5,索引3到5对应分钟部分
    
  3. 用负索引直接取末尾字符
    如果只是想拿最后几位,用负起始索引会更简洁:

    var day = datept.slice(-2); // 取最后2位,得到"19"
    var minutes = timept.slice(-2); // 取最后2位,得到"05"
    

额外小技巧:用split拆分日期时间

其实处理日期时间字符串,用split()可能更不容易出错,代码可读性也更高:

var [year, month, day] = datept.split('-');
var [hours, minutes] = timept.split(':');
// 直接得到:year="2018", month="01", day="19", hours="12", minutes="05"

内容的提问来源于stack exchange,提问作者Gucci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:46:18