业务场景:
在很多业务中,需要获取系统当前的时间,但是格式是需要自行拼接,一般拼接时间的格式为YYYYMMDD,例如20201021,有时候需要的格式为YYYY-MM-DD。但是,后者改为前者决不是直接删除“-”那么简单。
业务分析:
本来想复用代码,于是在实际项目中,直接将“-”删除了,由于“-”是字符串,所以直接将获取的年月日拼接即可,但是删去“-”后,此时的场景就是纯数字变量拼接,导致数字会直接相加。
数字 + 数字 ----> 求和
数字 + 字符串 -----> 拼接
字符串 + 字符串 ----> 拼接
//这个得出的效果就是年月日这三个数字的相加求和的值
var yesday = new Date(time);
yesday = yesday.getFullYear()+
(yesday.getMonth() > 8 ? (yesday.getMonth() + 1) : "0" + (yesday.getMonth() + 1)) +
(yesday.getDate() > 9 ? (yesday.getDate()) : "0" + (yesday .getDate()));
//这种写法在9月之前都不会发现问题,因为月份会走三目后面的选项,此时拼接了“0”。
解决策略:
//根据上面的拼接策略,得到启发,加一个空的字符串占位符,可使这串数字拼接在一起。
var yesday = new Date(time);
yesday = yesday.getFullYear() +''+
(yesday.getMonth() > 8 ? (yesday.getMonth() + 1) : "0" + (yesday.getMonth() + 1)) +
(yesday.getDate() > 9 ? (yesday.getDate()) : "0" + (yesday .getDate()));
当然,也可以利用es6的写法:`${变量}`
yesday = `${yesday.getFullYear()}${(yesday.getMonth() > 8 ? (yesday.getMonth() + 1) : "0" + (yesday .getMonth() + 1))}${(yesday.getDate() > 9 ? (yesday.getDate()) : "0" + (yesday .getDate()))}`
拓展:es6用法
`${变量}${变量}`
例:
var a=3;
var b=6;
console.log(`${a}${b}`) //36
cosnole.log(`${a+b}`) //9
1
函数返回多个变量,则要return的格式为return {key1:value1;key2:value2}