js处理时间

293 阅读3分钟

这是我参与8月更文挑战的第20天,活动详情查看:8月更文挑战

当时有遇到这么一个坑,在本地调试完全没问题,在安卓手机上调试也没问题,但是,偏偏到了ios上,就怎么都获取不到了,一直判断错误,后来查找了不少地发,终于发现,原来,ios处理的时间格式有规则。
ios无法解析这样格式的时间:2021-08-21 23:00:00,他需要把时间变成这样:2021/08/21 23:00:00
但后端返回的时间格式就是这样的,那么只能我们前端这里自己处理一下了

if (ios) {
   time = time.replace(/-/g, "/");
}

看了网上的一些解释:ISO 8601标准的字符串进行了一个神奇的断言:所有没有提供时区的字符串默认为标准时区。换言之,你会发现你解析出来的时间和你预期中的不一样,而且它打印的时候是按照本地时区又进行了转换
ES 2015标准中则是修复了该Bug,不过还是会让人觉得头大,毕竟你不知道你代码的最终运行环境会是ES5还是ES6.

记得当时有一个需求需要有特别多对时间的处理,所以了解了不少对时间的操作

时间

创建

可以有下面四种创建的方式

var today = new Date() // 如果没有提供参数,那么新创建的Date对象表示实例化时刻的日期和时间。 Sat Aug 21 2021 23:25:24 GMT+0800 (中国标准时间)
var d1 = new Date("October 13, 1975 11:13:00") // Mon Oct 13 1975 11:13:00 GMT+0800 (中国标准时间)
var d2 = new Date(79,5,24) // Sun Jun 24 1979 00:00:00 GMT+0800 (中国标准时间)
var d3 = new Date(79,5,24,11,33,0) // Sun Jun 24 1979 11:33:00 GMT+0800 (中国标准时间)

获取

let dt = new Date()

年:getFullYear()

月:getMonth()

日:getDate()

时:getHours()

分:getMinutes()

秒:getSeconds()

毫秒:getMilliseconds()

从 1970 年 1 月 1 日至今的毫秒数:getTime()

设置

年:setFullYear()

月:setMonth()

日:settDate()

时:setHours()

分:setMinutes()

秒:setSeconds()

毫秒:setMilliseconds()

年月日时分秒的时间格式YYYY-MM-DD HH:mm:ss

例子
当时,我们需要获取当前日子的第一天
var date = new Date(), 
y = date.getFullYear(),
m = date.getMonth();
var firstDay = new Date(y, m, 1);
如何把日期格式化为指定格式?

看到网上的一些处理,只要有了这些函数,对时间的处理我们就不用花那么多时间去处理了

Date.prototype.format = function (fmt) {
  var o = {
    "M+": this.getMonth() + 1,                   //月份
    "d+": this.getDate(),                        //日
    "h+": this.getHours(),                       //小时
    "m+": this.getMinutes(),                     //分
    "s+": this.getSeconds(),                     //秒
    "q+": Math.floor((this.getMonth() + 3) / 3), //季度
    "S": this.getMilliseconds()                  //毫秒
  };

  //  获取年份 
  // ①
  if (/(y+)/i.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  }

  for (var k in o) {
    // ②
    if (new RegExp("(" + k + ")", "i").test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    }
  }
  return fmt;
}

var now = new Date();
var nowStr = now.format("YYYY-MM-DD"); // 2021-01-11