时间与时间戳转换比较及android和ios对时间识别的区别

注意:

"2021-05-01 12:53:59.55" 时间对象在 ios 中会出现 NaN-NaN-NaN

需要将对象格式化为:"2021/05/01 12:53:59.55" 可同时兼容 android 和 ios。


//将某时间转时间戳
/*
var time = new Date("2021-05-01 12:53:59.55")
"2021-05-01 12:53:59.55"时间对象在ios中会出现NaN-NaN1-NaN需要将对象格式为:"2021/05/01 12:53:59.55"同时兼容android和ios
*/

var time = new Date("2021-05-01 12:53:59.55".replace(/-/g,"/"))

time.getTime()
console.log(time.getTime()) 

time.valueOf()
console.log(time.valueOf())

Number(time)
console.log(Number(time))

+time
console.log(+time)

Date.parse(time) //后三位固定为 000
console.log(Date.parse(time))   




//当前时间的时间戳:
new Date().getTime()
console.log(new Date().getTime())

new Date().valueOf()
console.log(new Date().valueOf())

Date.parse(new Date())
console.log(Date.parse(new Date()))

Number(new Date())
console.log(Number(new Date()))

+new Date()
console.log(+new Date())


时间戳转换为时间对象

// 注意:参数中的时间戳必须是13位的
new Date(1619746630790)

// 将时间戳转换为更加直观形象的本地时间
new Date(1619746630790).toLocaleString()

var time = new Date(1619746630790)
console.log(time.toLocaleString())  // 2021/4/30 09:37:10 字符串比较时注意月日的位数4非04

时间的格式化


new Date().getFullYear() //年
new Date().getMonth() //月 从0开始 0月为1月另2月非02月 非双位补齐
new Date().getDate()  //日 1日非01日 非双位补齐
new Date().getHours() //时 1时非01时 非双位补齐
new Date().getMinutes() //分 1分非01分 非双位补齐
new Date().getSeconds() //秒 1秒非01秒 非双位补齐
new Date().getDay() //周 0-6 周日-周六

/*
padStart(targetLength,padString) 用于头部补全,
padEnd(targetLength,padString) 用于尾部补全。

参数:
targetLength:目标长度。
如果这个数值小于当前字符串的长度,则返回当前字符串本身。

padString(可选参数):填充字符串。
如果字符串太长,使填充后的字符串长度超过了目标长度,则只保留最左侧的部分,其他部分会被截断。此参数的默认值为 " "
*/


//月日时分秒双位数补全
(new Date().getMonth() + 1).toString().padStart(2,'0')
new Date().getDate().toString().padStart(2,'0')
new Date().getHours().toString().padStart(2,'0')
new Date().getMinutes().toString().padStart(2,'0')
new Date().getSeconds().toString().padStart(2,'0')


//时间格式化输出
formattedDate(time){
  let date = new Date(time);
  let year = date.getFullYear();  
  let month = (date.getMonth() + 1).toString().padStart(2,'0')  
  let day = date.getDate().toString().padStart(2,'0')
  let hour = date.getHours().toString().padStart(2,'0')
  let minute = date.getMinutes().toString().padStart(2,'0')
  let second = date.getSeconds().toString().padStart(2,'0')
  let weekDay = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
  let week = date.getDay(); 
  let formattedDate = `${year}-${month}-${day} ${hour}:${minute}:${second} ${weekDay[week]}`;  
  return formattedDate
},


时分秒与时间戳相互转换


//时间转时间戳 小时*3600 + 分*60 + 秒
let nowStamp = new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()

console.log(nowStamp)  //61579




//时间戳转时间
let nowTime = Number(61579);
let hour = Math.floor(nowTime / 3600).toString().padStart(2,'0')
let minute = Math.floor((nowTime % 3600) / 60).toString().padStart(2,'0')
let second = (parseInt(nowTime % 3600) % 60).toString().padStart(2,'0')

console.log(`${hour}:${minute}:${second}`)   //17:06:19

时间的差:

// 时分秒差比较  小时*3600 + 分*60 + 秒 (注意没有区分年月日,仅时分秒比较)
let nowHourMinutesSecond = new Date().getHours()*3600 + new Date().getMinutes()*60 + new Date().getSeconds()

// 单独时分区间截取转换 (注意没有区分年月日,仅时分秒比较)
let timeRange = "10:00~11:25"  //分别截取 11时 和 25分
let cutHour = Number(timeRange.substring(timeRange.indexOf("~") + 1,timeRange.lastIndexOf(":")))*3600
let cutMinutes = Number(timeRange.substring(timeRange.lastIndexOf(":") + 1,timeRange.length))*60

console.log((cutHour+cutMinutes) - nowHourMinutesSecond) //5280
console.log(nowHourMinutesSecond,cutHour,cutMinutes)  //35993 39600 1500

/* 字符串截取 
string.slice(start, end)
  start(必需):规定从何处开始选取。如果是负数,那么它规定从字符串尾部开始算起的位置。也就是说,-1 指最后一个字符,-2 指倒数第二个字符,以此类推。
  end(可选):规定从何处结束选取,即结束处的字符下标。如果没有指定该参数,那么截取的字符串包含从start 到结束的所有字符。如果这个参数是负数,那么它规定的是从数组尾部开始算起的字符。

string.substring(start, stop)
  start(必需):一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。
  stop(可选):一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。

stringObject.substr(start, length)
  start(必需):所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。
  length(可选):在返回的子字符串中应包括的字符个数。

指定字符串下标
   indexOf()  //返回字符串中匹配子串的第一个字符的下标
   lastIndexOf()  //该方法返回从右向左出现某个字符或字符串的首个字符索引值(与 indexOf 相反)
*/



// 天数差比较
let diffeTime = Math.ceil(Math.abs(new Date("2023/12/25 16:20:32") - new Date()) / (1000 * 3600 * 24))



//月数差比较
let diffeMonth = (Math.floor((new Date() - new Date("2023/10/06 16:06:06")) / (24 * 3600 * 1000 )) / 30).toFixed(0)

/* JavaScript Math对象 
Math.abs(x)   //返回 x 的绝对值
Math.acos(x)   //返回 x 的反余弦值
Math.asin(x)   //返回 x 的反正弦值
Math.atan(x)   //以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值
Math.atan2(y,x)   //返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)
Math.ceil(x)   //对数进行上舍入
Math.cos(x)   //返回数的余弦
Math.exp(x)   //返回 Ex 的指数
Math.floor(x)   //对 x 进行下舍入
Math.log(x)   //返回数的自然对数(底为e)
Math.max(x,y,z,...,n)   //返回 x,y,z,...,n 中的最高值
Math.min(x,y,z,...,n)   //返回 x,y,z,...,n中的最低值
Math.pow(x,y)   //返回 x 的 y 次幂
Math.random()   //返回 0 ~ 1 之间的随机数
Math.round(x)   //四舍五入
Math.sin(x)   //返回数的正弦
Math.sqrt(x)   //返回数的平方根
Math.tan(x)   //返回角的正切
Math.tanh(x)   //返回一个数的双曲正切函数值
Math.trunc(x)   //将数字的小数部分去掉,只保留整数部分
*/

时间比较:

时间比较要注意两个时间的格式是否一致,时间的时分秒格式是否一致,时间字符串位数是否一致

yyyy/mm/dd hh:mm:ss 比较 yyyy/mm/dd hh:mm:ss

yyyy/mm/dd 比较 yyyy/mm/dd

时间字符串比较需 补齐位数

//时间字符串比较 需补齐位数

let time1 = "2024/1/9"
let time2 = "2024/1/10"
if(time1<time2){
  console.log(`${time2}大,${time1}小`)
}else{
  console.log(`${time1}大,${time2}小`)
}

//2024/1/9大,2024/1/10小



let time1 = "2024/01/09"
let time2 = "2024/01/10"
if(time1<time2){
  console.log(`${time2}大,${time1}小`)
}else{
  console.log(`${time1}大,${time2}小`)
}
//2024/01/10大,2024/01/09小

时间戳比较需 格式相同(年/月/日 与 年/月/日 比较年/月/日 时:分:秒 与 年/月/日 时:分:秒 比较

注意:

yyyy/mm/dd 时分秒为:00:00:00 (00时00分00秒) 

相同的年月日 yyyy/mm/dd hh:mm:ss 大于 yyyy/mm/dd

let nowTime = new Date().getTime()
let selectTime = new Date("2024/1/11").getTime()


console.log(new Date("2024/1/11"))
//Thu Jan 11 2024 00:00:00 GMT+0800 (中国标准时间) 注意年月日相同 时分秒为 00:00:00

console.log(new Date())
//Thu Jan 11 2024 15:04:42 GMT+0800 (中国标准时间) 注意年月日相同 时分秒为 15:04:42

console.log(nowTime)
//1704956682563

console.log(selectTime)
//1704902400000

if(nowTime<=selectTime){
  console.log("当前时间小于等于选择时间")
}else{
  console.log("当前时间大于选择时间")
}
//当前时间大于选择时间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值