动雷霆 2021-11-18 10:16 采纳率: 70%
浏览 93
已结题

小程序js中require的一个获取时间的代码,date.getMonth(),但是比正常月份少了一个月

我在date.getMonth()后面+1就是正常月份了,但是有个问题,比如现在是11月份,当date.getMonth()正常获取到的值是10月,而我如果想要显示正常就是+1,就是11月份,如果+2就是下个月也就是12月,但是我要提前获取后两个月也就是明年的1月份 使用+3就不行了 就会变成13月 这是什么意思?于是我做了一个判断调整不知道行不行 因为没有具体测试过,现在我要做的功能是提前获取下个月的功能。
本来的代码如下:

比如今天是2021-11-18
这是正常代码,获取到的是比今天少一个月是:2021-10-18,是因为月份对应下标0-11

const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth()
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('-') //+ ' ' + [hour, minute, second].map(formatNumber).join(':')//时间注释掉了
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

module.exports = {
  formatTime: formatTime
}

这是我+1后获取到的就是正常月份,也就是2021-11-18


const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('-') //+ ' ' + [hour, minute, second].map(formatNumber).join(':')//时间注释掉
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

module.exports = {
  formatTime: formatTime
}

但是我需要的业务是获取下个月的时间,也就是2021-12-18这个时间戳,目的是用来和当前时间做对比的,我在data.getMonth()后面直接+2,也得以实现了,那么问题来了,我刚好今天时间是11-18 我再+2后虽然获取到的时间是12-18,但是如果今天是12-18呢,我+2获取到的时间应该是2022-01-18才对吧?但是并不是这样啊,我为了验证下,我再data.getMonth()后面直接+3 , data.getMonth()本身是10 加了3 不是返回的1月 而是直接给我一个2021-13-18,这就是尴尬了啊,所以我想了个折中的办法,增加一个12月的判断,后来发现月份变了,年份还是不对,在增加一个年份判断 效果如下:


const formatTime = date => {
  //const year = date.getFullYear()
  const months = date.getMonth() + 1
  console.log("看看当前月:",months)
  if (months==12){//判断当前月份在date.getMonth() + 1后是不是12月
  var year = date.getFullYear()+1  //必须加上1不然 当前2021-12-18,获取下个月就变成2021-01-18了,年份还是没变
  var month = 1  //如果是12 那就直接给写死变成1月
  }else{
  var year = date.getFullYear()   //不是12月就正常获取下个月的年份
  var month = date.getMonth() + 2  //如果不是12月就正常+2变成下个月就行了
  }
  
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('-') //+ ' ' + [hour, minute, second].map(formatNumber).join(':')//注释了小时分钟,不需要显示
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

module.exports = {
  formatTime: formatTime
}

所以我的这种办法应该是最笨的办法了把,但是我也想不到什么好的办法,有懂的知道怎么更加准确的获取下个月的时间吗?做的一个功能是 缓存判断,比如改名,当用户改名时 给他记录一个时间就是下个月,然后勇当前时间和记录的时间对比,不到一个月不允许修改,结果只能这样做了。在这里需要懂得同志来帮忙解惑下。感激不尽!

  • 写回答

2条回答 默认 最新

查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月26日
  • 已采纳回答 11月18日
  • 创建了问题 11月18日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?