共计 1691 个字符,预计需要花费 5 分钟才能阅读完成。
WXS(WeiXin Script)是小程序的一套脚本语言,wxs 与 javascript 是不同的语言,有自己的语法,并不和 javascript 一致。其中包括了很多日常使用的 javascript 函数,在 wxs 中都是不能同样使用的。最近在做一个列表的时候,涉及到时间格式化操作。就遇到了这个问题,以前写好了的格式化工具函数直接拷贝到小程序项目的 wxs 文件中,函数不能正常执行。其中包括了下面的几个错误
正则表达式在字符串的 replace 函数中的使用方法不一样,不能直接使用 var a = /[0-9]/ 这种方式声明使用。正确的方式为 var reg = getRegExp(“-“, “g”);
获取当前时间不能通过 new Date() 获取,而是通过 getDate 方法获取。
getDate(‘2018/12/12’) 可以获取对应日期的 date 类型的时间。
按照上面的异同,修改过后的时间格式化函数代码为
var formatNumber = function (n) {
n = n.toString()
return n[1] ? n : ‘0’ + n
}
var regYear = getRegExp(“(y+)”, “i”);
var dateFormat = function (timestamp, format) {
if (!format) {
format = “yyyy-MM-dd hh:mm:ss”;
}
timestamp = parseInt(timestamp);
// 通过 getDate() 方法获取 date 类型的时间
var realDate = getDate(timestamp);
function timeFormat(num) {
return num < 10 ? ‘0’ + num : num;
}
var date = [
[“M+”, timeFormat(realDate.getMonth() + 1)],
[“d+”, timeFormat(realDate.getDate())],
[“h+”, timeFormat(realDate.getHours())],
[“m+”, timeFormat(realDate.getMinutes())],
[“s+”, timeFormat(realDate.getSeconds())],
[“q+”, Math.floor((realDate.getMonth() + 3) / 3)],
[“S+”, realDate.getMilliseconds()],
];
var reg1 = regYear.exec(format);
// console.log(reg1[0]);
if (reg1) {
format = format.replace(reg1[1], (realDate.getFullYear() + ”).substring(4 – reg1[1].length));
}
for (var i = 0; i < date.length; i++) {
var k = date[i][0];
var v = date[i][1];
// getRegExp 初始化一个正则表达式对象
var reg2 = getRegExp(“(” + k + “)”).exec(format);
if (reg2) {
format = format.replace(reg2[1], reg2[1].length == 1
? v : (“00” + v).substring((“” + v).length));
}
}
return format;
}
把格式化的日期时间字符串转换成时间戳
function parse(fmt) {
fmt1 = fmt.substring(0, 19);
var reg = getRegExp(“-“, “g”);
fmt2 = fmt1.replace(reg, ‘/’);
var timestamp = getDate(fmt2).getTime();
return timestamp;
}
调用方法如下
function getDateByDateTimeFmt(dateTimeFmt) {
return dateFormat(parse(dateTimeFmt), ‘MM 月 dd 日 ’);
}
getDateByDateTimeFmt(‘2012-12-12 13:12:12’) // => 12 月 12 日