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类型的时间。
按照上面的异同,修改过后的时间格式化函数代码为
代码语言:javascript复制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;
}
把格式化的日期时间字符串转换成时间戳
代码语言:javascript复制function parse(fmt) {
fmt1 = fmt.substring(0, 19);
var reg = getRegExp("-", "g");
fmt2 = fmt1.replace(reg, '/');
var timestamp = getDate(fmt2).getTime();
return timestamp;
}
调用方法如下
代码语言:javascript复制function getDateByDateTimeFmt(dateTimeFmt) {
return dateFormat(parse(dateTimeFmt), 'MM月dd日');
}
getDateByDateTimeFmt('2012-12-12 13:12:12') // => 12月12日