toISOString()处理时间少一天踩坑记录

原因:原本我是想处理一下后台返回的时间问题,我需要展示:年月日,但是后台返回了:年月日时分秒,开始我是这么写的:(不严谨代码

function formatDate(dateTime) {  
    const date = new Date(dateTime) // 创建一个新的Date对象,尝试将传入的dateTime字符串解析为日期和时间  
  
    // 如果dateTime是一个有效的日期时间字符串,那么date对象将包含该日期和时间的信息  
    // 如果dateTime不是一个有效的日期时间字符串,那么date对象将是一个"Invalid Date"  
  
    return date.toISOString().split('T')[0] // 调用date对象的toISOString()方法,这会返回一个代表该日期时间的ISO 8601扩展格式的字符串  
  
    // ISO 8601扩展格式通常是这样的:"YYYY-MM-DDTHH:mm:ss.sssZ"  
    // 例如:"2023-06-20T12:34:56.789Z"  
  
    // 然后,使用split('T')方法将字符串分割成两部分,以'T'字符为分隔符  
    // 这将返回一个数组,例如:["2023-06-20", "12:34:56.789Z"]  
  
    // 最后,通过访问数组的第一个元素(索引为0),我们得到日期部分:"2023-06-20"  
  
    // 所以,这个函数的作用是:将传入的dateTime字符串解析为日期,并返回该日期的ISO 8601格式中的日期部分(不带时间)  
}
// 使用示例  
const formattedDate = formatDate("2024-05-01 00:00:00")  
console.log(formattedDate)// 输出 "2024-04-30"

但是:这样输入 "2024-05-01 00:00:00" 会导致出现 "2024-04-30" 的情况,原因是:date.toISOString().全球通用时间,会减8个小时, 我们在东8区

这时候我们就要修改一下代码:

方法一:这个方法最简单直接加八小时就行

function formatDate(dateTime) {  
    const date = new Date(+new Date(dateTime) + 8 * 3600 * 1000)   
  
    return date.toISOString().split('T')[0]   
}
// 使用示例  
const formattedDate = formatDate("2024-05-01 00:00:00")  
console.log(formattedDate)// 输出 "2024-05-01"

方法二:这个方法哩更加可靠

function formatDate(dateTime) {  
    // 创建一个新的Date对象,使用传入的dateTime作为参数(dateTime应该是一个可以解析为日期的字符串或时间戳)  
    const date = new Date(dateTime)  
  
    // 获取年份(四位数)  
    const year = date.getFullYear()  
  
    // 获取月份(从0开始,所以需要+1),然后使用padStart方法确保月份总是两位数,不足两位时前面补0  
    const month = String(date.getMonth() + 1).padStart(2, '0')  
  
    // 获取日期(一个月中的第几天),同样使用padStart方法确保日期总是两位数  
    const day = String(date.getDate()).padStart(2, '0')  
  
    // 使用模板字符串将年份、月份和日期组合成一个形如"YYYY-MM-DD"的字符串,并返回  
    return `${year}-${month}-${day}`  
}  
  
// 使用示例  
const formattedDate = formatDate("2024-05-01 00:00:00")  
console.log(formattedDate)// 输出 "2024-05-01"

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值