【Web前端问题】js时间格式化怎么去优化?

splitDate() {

const createStartTime = this.orderDate[0]

const createEndTime = this.orderDate[1]

const createStartMonth = (createStartTime.getMonth() + 1) < 10 ? '0' + (createStartTime.getMonth() + 1) : createStartTime.getMonth() + 1

const createEndMonth = (createEndTime.getMonth() + 1) < 10 ? '0' + (createEndTime.getMonth() + 1) : createEndTime.getMonth() + 1

const createStartDate = createStartTime.getDate() < 10 ? '0' + (createStartTime.getDate()) : createStartTime.getDate()

const createEndDate = createEndTime.getDate() < 10 ? '0' + (createEndTime.getDate()) : createEndTime.getDate()

const createStartHours = createStartTime.getHours() < 10 ? '0' + createStartTime.getHours() : createStartTime.getHours()

const createEndHours = createEndTime.getHours() < 10 ? '0' + createEndTime.getHours(): createEndTime.getHours()

const createStartMinutes = createStartTime.getMinutes() < 10 ? '0' + createStartTime.getMinutes() : createStartTime.getMinutes()

const createEndMinutes = createEndTime.getMinutes() < 10 ? '0' + createEndTime.getMinutes(): createEndTime.getMinutes()

const createStartSeconds = createStartTime.getSeconds() < 10 ? '0' + createStartTime.getSeconds() : createStartTime.getSeconds()

const createEndSeconds = createEndTime.getSeconds() < 10 ? '0' + createEndTime.getSeconds(): createEndTime.getSeconds()

this.orderForm.createStartTime = createStartTime.getFullYear() + '-' + createStartMonth + '-' + createStartDate + ' ' + createStartHours + ':' + createStartMinutes + ':' + createStartSeconds

this.orderForm.createEndTime = createEndTime.getFullYear() + '-' + createEndMonth + '-' + createEndDate + ' ' + createEndHours + ':' + createEndMinutes + ':' + createEndSeconds

}

我想把一个标准时间转换为2019-01-01 09:01这样的格式,当月份和时分秒小于10的时候前面补上0,于是用了上面的三元来判断,一个是开始时间,一个是结束时间,但是写完发现好臃肿,请问一下,这样的话如何优化使得代码更精简?

回答:

Date.prototype.toFormattedString = function (format) {

const O = {

"M+": this.getMonth() + 1,

"d+": this.getDate(),

"H+": this.getHours(),

"h+": this.getHours(),

"m+": this.getMinutes(),

"s+": this.getSeconds(),

"q+": Math.floor((this.getMonth() + 3) / 3),

"f": this.getMilliseconds()

};

if (/(y+)/.test(format)) {

format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));

}

for (let k in O) {

if (new RegExp("(" + k + ")").test(format)) {

format = format.replace(RegExp.$1, (RegExp.$1.length === 1) ? (O[k]) : (("00" + O[k]).substr(("" + O[k]).length)));

}

}

return format;

};

各种格式,都能胜任:

let date = new Date();

date.toFormattedString('yyyy-MM-dd HH:mm:ss'); // 2019-11-07 08:52:13

date.toFormattedString('yy/MM/dd'); // 19/01/01

date.toFormattedString('M月d日'); // 11月7日

date.toFormattedString('HH:mm:ss'); // 08:52:13

date.toFormattedString('m分,s秒'); // 52分,13秒

回答:

上面有人推荐了 moment.js ,那我就再推个轻量级的

回答:

个人建议可以用插件来做。dayjs moment都可以处理。个人推荐dayjs,dayjs所占的内存比moment小

回答:

之前在手机上贴的答案,格式乱了,现在格式刷刷了一下。
自己项目里写的一个转换函数,传入一个时间戳(单位s)和时间格式,返回时间字符串。

function formatTime(timestamp, format = 'yyyy-MM-dd HH:mm') {

const formatNum = num => String(num).padStart(2, '0')

const date = new Date(timestamp * 1000)

return format.replace(/yyyy/g, date.getFullYear())

.replace(/MM/g, formatNum(date.getMonth() + 1))

.replace(/dd/g, formatNum(date.getDate()))

.replace(/HH/g, formatNum(date.getHours()))

.replace(/mm/g, formatNum(date.getMinutes()))

.replace(/ss/g, formatNum(date.getSeconds()))

.replace(/SSS/g, formatNum(date.getMilliseconds()))

}

想要什么格式都可以随意定制:
image.png

回答:

写一个函数专门处理呀,然后调用就行了,就不用一个一个写了

回答:

str2(num){

num = '00' + num

return num.substr(num.length - 2, 2)

},

dateFormat(date){

let Y = date.getFullYear()

let M = date.getMonth() + 1

let D = date.getDate()

let h = date.getHours()

let m = date.getMinutes()

return Y + '-' + this.str2(M) + '-' + this.str2(D) + ' ' + this.str2(h) + ':' + this.str2(m)

},

splitDate(){

this.orderForm.createStartTime = this.dateFormat(this.orderDate[0])

this.orderForm.createEndTime = this.dateFormat(this.orderDate[1])

}

回答:

专业的事就请专业的插件来做了。
比如 moment.js

以上是 【Web前端问题】js时间格式化怎么去优化? 的全部内容, 来源链接: utcz.com/a/143736.html

回到顶部