这是我参与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