小程序wxs中的時間格式化以及格式化時間和date時間互轉

WXS(WeiXin Script)是小程序的一套腳本語言,wxs 與 javascript 是不一樣的語言,有本身的語法,並不和 javascript 一致。其中包括了不少平常使用的javascript函數,在wxs中都是不能一樣使用的。最近在作一個列表的時候,涉及到時間格式化操做。就遇到了這個問題,之前寫好了的格式化工具函數直接拷貝到小程序項目的wxs文件中,函數不能正常執行。其中包括了下面的幾個錯誤javascript

  1. 正則表達式在字符串的replace函數中的使用方法不同,不能直接使用var a = /[0-9]/這種方式聲明使用。正確的方式爲var reg = getRegExp("-", "g");
  2. 獲取當前時間不能經過new Date()獲取,而是經過getDate方法獲取。
  3. getDate('2018/12/12')能夠獲取對應日期的date類型的時間。

按照上面的異同,修改事後的時間格式化函數代碼爲java

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日
相關文章
相關標籤/搜索