65.9K
CodeProject 正在变化。 阅读更多。
Home

JavaScript VB 函数

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.85/5 (10投票s)

2015年7月10日

CPOL

8分钟阅读

viewsIcon

45857

downloadIcon

602

将 VB 函数移植到 JavaScript 以及其他有用的函数

引言

本文的目的是收集一些我能够找到的、与 Visual Basic 函数等效的 JavaScript 函数库。

几个月前,我开始学习 JQuery Mobile,这让我接触了大量的 JavaScript 和 PHP 编码。作为一名有 Visual Basic 背景的开发者,我希望能够轻松过渡到 JavaScript,我必须承认,学习 JQuery 和 JavaScript 并没有我预想的那么难。只要我知道自己想实现什么,在网上搜索通常都能提供大部分答案。有些能用,有些不能。我决定将所有我学到或发现有用的函数,以及一些我概念化的函数,编译成一个单一的库。

这里的库文件已被拆分为两个文件,一个名为 support.js,另一个名为 websql.js,用于所有与 Web SQL 相关的函数。

引用
Javascript Vb 等效函数

背景

这背后的基本思想是,任何使用 JavaScript 函数的人都可以使用类似于他们在 Visual Basic 中编写程序时使用的代码语法,并且这些函数及其返回值将执行相同的功能。例如,Visual Basic 有一个 `Len` 函数,它返回 `string` 的长度(整数)。JavaScript 中没有 `Len` 函数,但有一个 `length` 函数,你可以将其传递给 `string` 以返回其 `length`。因此,这些脚本为两者之间的任何人提供了一个易于实现的途径。这些脚本用于开发 JavaScript 应用程序,而不是 VB 应用程序。在解释源代码时,我将对每个函数进行描述,然后说明执行相同功能的适用 JavaScript 函数。我打算随着发现更多功能和函数而进行添加。

一些愚蠢的假设:您熟悉 Visual Basic 和 JavaScript 编程。

本文已通过 CodeProject.Show 离线编写。

Using the Code

FileNameValid(str) - 返回一个移除了所有特殊字符的 string

function FileNameValid(str) {
     var s = str + '';
     s = s.replace(/\s+/gi, '-');
     return s.replace(/[^a-zA-Z0-9\-]/gi, '');
}

ValidID(str) - 返回一个将所有空格转换为哈希 -string

function ValidID(str) {
     var s = str + '';
     s = s.replace(/\s+/gi, '-');
     return s;
}

NumericOnly(svalue) - 返回 string 中的所有数字。(这是长版本。)

function NumericOnly(svalue) {
     var sout,
     lenvalue,
     i,
     spart;
     sout = "";
     lenvalue = Len(svalue);
     for (i = 1; i <= lenvalue; i++) {
          spart = Mid(svalue, i, 1);
          switch (true) {
               case ((spart) == "1"):
               sout = sout + spart;
               break;
               case ((spart) == "2"):
               sout = sout + spart;
               break;
               case ((spart) == "3"):
               sout = sout + spart;
               break;
               case ((spart) == "4"):
               sout = sout + spart;
               break;
               case ((spart) == "5"):
               sout = sout + spart;
               break;
               case ((spart) == "6"):
               sout = sout + spart;
               break;
               case ((spart) == "7"):
               sout = sout + spart;
               break;
               case ((spart) == "8"):
               sout = sout + spart;
               break;
               case ((spart) == "9"):
               sout = sout + spart;
               break;
               case ((spart) == "0"):
               sout = sout + spart;
               break;
               case ((spart) == "-"):
               sout = sout + spart;
              }
             }
             return sout;
}

NewId() - 返回基于系统日期的唯一 ID。

function NewId() {
     var dc = new Date();
     var id = new String(dc.getTime());
     id += new String(getRandomInt(0, 100));
     return id;
}

Replace(str,fnd,rpl) - 返回一个 string,其中指定的子字符串已被另一个子字符串替换了指定次数。

function Replace(str,fnd,rpl) {
        var regex;
     var cnt = null;
     var st = null;
     var cmp;
        if(st===null||st===""||st<0){st=1;}
        st-=1;
        if(cnt===null||cnt===""||cnt<0){cnt=0;}
        if(st>=0){str=str.substr(st,str.length);}
        fnd=fnd.replace(/([\$\^\[\(\)\|\*\+\?\.\\])/g,'\\$1');
        var opt='';
        cmp=cmp+"";
        if(cmp==='1'){opt='i';}
        if(cnt>0) {
                regex=new RegExp(fnd,opt);
                for(var i=0;i<cnt;i++) {
                        str=str.replace(regex,rpl);
              }
              }else{
                        opt+='g';
                        regex=new RegExp(fnd,opt);
                        str=str.replace(regex,rpl);
                 }
                    return str;
}

IsNumeric(sValue) - 返回一个布尔值,指示对象是否为数字。

function IsNumeric(sValue) {
     return!isNaN(sValue);
}

FixParent(sField, sValue) - 如果 sValue 是数字,则返回 sField-sValue 格式的 string,否则返回 sValue

function FixParent(sField, sValue) {
        var sout;
        if (IsNumeric(sValue) == true) {
                sout = sField + "-" + sValue;
          return sout;
          } else {
                    return sValue;
             }
}

getRandomInt(min, max) - 返回两个指定值之间的随机整数。

function getRandomInt(min, max) {
     return Math.floor(Math.random() * (max - min + 1)) + min;
}

NewDate() - 返回当前系统日期时间。

function NewDate() {
     return new Date();
}

Right(str, n) - 返回一个 string,其中包含 string 右侧指定数量的字符。

function Right(str, n){
        if (n <= 0)
     return "";
        else if (n > String(str).length)
     return str;
        else {
          var iLen = String(str).length;
          return String(str).substring(iLen, iLen - n);
         }
}

Left(str, n) - 返回一个 string,其中包含 string 左侧指定数量的字符。

function Left(str, n) {
     var s = str + '';
     var iLen = s.length;
     if (n <= 0) {
          return "";
          } else if (n >= iLen) {
              return str;
              } else {
                  return s.substr(0, n);
                 }
}

Mid(strMid, intBeg, intEnd) - 返回一个 string,其中包含 string 中指定数量的字符。

function Mid(strMid, intBeg, intEnd) {
     if (strMid === null || strMid === '' || intBeg < 0) {
          return '';
         }
         intBeg -= 1;
         if (intEnd === null || intEnd === '') {
              return strMid.substr(intBeg);
              } else {
                  return strMid.substr(intBeg, intEnd);
                 }
}

CStr(str) - 从传入的对象返回一个 string

function CStr(str) {
     var s = str;
     s = s.toString();
     return s;
}

LCase(str) - 返回传入值的全小写 string

function LCase(str) {
     return str.toLowerCase();
}

InStr(searchStr, searchFor) - 返回一个 string 在另一个 string 中的位置。

function InStr(searchStr, searchFor) {
     if (Len(searchStr) = 0) {
          return 0;
         }
         var s = searchStr;
         var s1 = searchFor;
         s = s.toString();
         s1 = s1.toString();
         s = LCase(s);
         s1 = LCase(s1);
         var loc = s.indexOf(s1) + 1;
         return loc;
}

InStrRev(srchStr, fndStr, start, cmp) - 返回一个 string 在另一个 string 中的最后一个位置。

function InStrRev(srchStr, fndStr, start, cmp) {
     if (!fndStr || fndStr === null) {
          fndStr = "";
         }
         if (!cmp) {
              cmp = 0;
             }
             srchStr.toString();
             if (cmp == 1) {
                  srchStr = srchStr.toLowerCase();
                  fndStr = fndStr.toLowerCase();
                 }
                 if (!start || !IsNumeric(start)) {
                      start = -1;
                     }
                     if (start > -1) {
                          srchStr = srchStr.substr(0, start);
                         }
                         var loc;
                         if (fndStr === "") {
                              loc = srchStr.length;
                              } else {
                                  loc = srchStr.lastIndexOf(fndStr) + 1;
                                 }
                                 return loc;
}

Len(str) - 返回一个整数,其中包含 string 中的字符数。

function Len(str) {
     str += '';
     return str.length;
}

Chr(num) - 返回与指定字符代码关联的字符。

function Chr(num) {
     var res = String.fromCharCode(num);
     return res;
}

与之相反的是 Asc

function Asc(str) {
     return str.charCodeAt(0);
}

FM() - 返回字符 254 string

function FM() {
     return Chr(254);
}

VM() - 返回字符 253 string

function VM() {
     return Chr(253);
}

Quote() - 返回字符 34 string

function Quote() {
     return Chr(34);
}

InQuotes(value) - 返回用双引号括起来的传入 string

function InQuotes(value) {
     var res = Quote + value + Quote
     return res;
}

MakeMoney(nStr) - 将传入的 string 返回为 Currency

function MakeMoney(nStr) {
     nStr = ProperAmount(nStr);
     nStr += '';
     x = nStr.split('.');
     x1 = x[0];
     x2 = x.length > 1 ? '.' + x[1] : '';
     var rgx = /(\d+)(\d{3})/;
     while (rgx.test(x1)) {
          x1 = x1.replace(rgx, '$1' + ',' + '$2');
         }
         return x1 + x2;
}

isValidDate(dateStr) - 返回一个布尔值,表示日期是否有效。有效日期格式为 MM/DD/YYMM/DD/YYYYMM-DD-YYMM-DD-YYYY

function isValidDate(dateStr) {
     if (Len(dateStr) = 0) {
          return "0"
         }
         var msg = "";
         // Checks for the following valid date formats:
         // MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
         // Also separates date into month, day, and year variables
         
         // To require a 2 & 4 digit year entry, use this line instead:
         //var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
         // To require a 4 digit year entry, use this line instead:
         var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
         
         var matchArray = dateStr.match(datePat); // is the format ok?
         if (matchArray == null) {
              return "0";
             }
             
             month = matchArray[1]; // parse date into variables
             day = matchArray[3];
             year = matchArray[4];
             
             if (month < 1 || month > 12) { // check month range
              msg = "Month must be between 1 and 12.";
              return "0";
             }
             
             if (day < 1 || day > 31) {
                  msg = "Day must be between 1 and 31.";
                  return "0";
                 }
                 
                 if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
                      msg = "Month " + month + " doesn't have 31 days!";
                      return "0";
                     }
                     
                     if (month == 2) { // check for february 29th
                      var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
                      if (day > 29 || (day == 29 && !isleap)) {
                           msg = "February " + year + " doesn't have " + day + " days!";
                           return "0";
                          }
                         }
                         
                         if (day.charAt(0) == '0')
                         day = day.charAt(1);
                         
                         //Incase you need the value in CCYYMMDD format in your server program
                         //msg = (parseInt(year,10) * 10000) + 
                         //(parseInt(month,10) * 100) + parseInt(day,10);
                         
                         return msg; // date is valid
}

MvRest(svalue, iposition, delimiter) - 从分隔 string 的特定位置返回 string 的其余部分。索引从 1 开始。

function MvRest(svalue, iposition, delimiter) {
     var mvalues,
     tvalues,
     xvalue,
     x,
     y,
     resultx;
     var lendelim;
     lendelim = Len(delimiter);
     mvalues = Split(svalue, delimiter);
     tvalues = mvalues.length - 1;
     iposition = iposition - 1;
     if (iposition <= -1) {
          xvalue = mvalues[tvalues];
          return xvalue;
         }
         
         if (iposition > tvalues) {
              return "";
             }
             
             resultx = "";
             x = iposition + 1;
             for (y = x; y <= tvalues; y++) {
                  xvalue = mvalues[y];
                  resultx = resultx + xvalue + delimiter;
                 }
                 
                 resultx = Left(resultx, Len(resultx) - lendelim);
                 return resultx;
}

Age(birthDate) - 根据传入的出生日期返回整数年龄,有效日期格式为 YYYY-MM-DD。这使用系统日期。

function Age(birthDate) {
     birthDate = Replace(birthDate, ".", "-");
     var yyyy = MvField(birthDate,1, "-");
     var mmmm = MvField(birthDate,2, "-");
     var dddd = MvField(birthDate,3, "-");
     var agex = getAge(mmmm,dddd,yyyy);
     agex = MvField(agex,1, ".");
     return agex;
}

getAge(birthMonth, birthDay, birthYear) - 根据传入的 monthdayyear 返回整数年龄。

function getAge(birthMonth, birthDay, birthYear) {
     todayDate = new Date();
     todayYear = todayDate.getFullYear();
     todayMonth = todayDate.getMonth();
     todayDay = todayDate.getDate();
     age = todayYear - birthYear;
     
     if (todayMonth < birthMonth - 1) {
          age--;
         }
         
         if (birthMonth - 1 == todayMonth && todayDay < birthDay) {
              age--;
             }
             return age;
}

MvSum(strvalues, delim) - 返回所有分隔值的总和,例如,MvSum("123,5,6",",") 将返回 134

function MvSum(strvalues, delim) {
     var dtot,
     i;
     dtot = 0;
     var spvalues;
     spvalues = Split(strvalues, delim);
     var dlen;
     dlen = spvalues.length - 1;
     for (i = 0; i <= dlen; i++) {
          dtot = parseFloat(dtot) + parseFloat(spvalues[i]);
         }
         dtot = Round(dtot, 2);
         return dtot;
}

InSingleQuote(strV) - 返回用单引号括起来的传入值的 string

function InSingleQuote(strV) {
     return "'" + strV + "'";
}

MonthNumber(strM) - 从传入的月份名称返回月份数字。

function MonthNumber(strM) {
     strM = Left(strM,3);
     strM = LCase(strM);
     switch (true) {
          case ((strM) == "jan"):
          return 1;
          break;
          case ((strM) == "feb"):
          return 2;
          break;
          case ((strM) == "mar"):
          return 3;
          break;
          case ((strM) == "apr"):
          return 4;
          break;
          case ((strM) == "may"):
          return 5;
          break;
          case ((strM) == "jun"):
          return 6;
          break;
          case ((strM) == "jul"):
          return 7;
          break;
          case ((strM) == "aug"):
          return 8;
          break;
          case ((strM) == "sep"):
          return 9;
          break;
          case ((strM) == "oct"):
          return 10;
          break;
          case ((strM) == "nov"):
          return 11;
          break;
          case ((strM) == "dec"):
          return 12;
         }
}

Split(svalue, sdelimiter) - 返回一个基于零的一维数组,其中包含指定数量的子字符串。

function Split(svalue, sdelimiter) {
     svalue += '';
     sdelimiter += '';
     return svalue.split(sdelimiter);
}

RemoveDelim(strmv, delim) - 返回一个末尾没有分隔符的 string,例如,RemoveDelim("Mash;Mbanga;") 将返回 Mash;Mbanga

function RemoveDelim(strmv, delim) {
     var lendelim,
     rightpart,
     strout;
     lendelim = Len(delim);
     rightpart = Right(strmv, lendelim);
     strout = strmv;
     if (rightpart == delim) {
          strout = Left(strmv, Len(strmv) - lendelim);
         }
         return strout;
}

SaveSetting(key, value) - 这与 localStorage.setItem(key, value) 相同。

function SaveSetting(key, value) {
     key = CStr(key);
     key = Trim(key);
     value = CStr(value);
     value = Trim(value);
     localStorage.setItem(key, value);
}

GetSetting(key) - 这与 localStorage.getItem(key) 相同。

function GetSetting(key) {
     key = CStr(key);
     key = Trim(key);
     var svalue;
     svalue = localStorage.getItem(key);
     if (isNull(svalue) == true) {
          svalue = "";
         }
         svalue = CStr(svalue);
         svalue = Trim(svalue);
         return svalue;
}

MvRemoteItem(strmv, sremove, delim) - 返回一个不包含指定子项的分隔 string

function MvRemoteItem(strmv, sremove, delim) {
     sremove = LCase(sremove);
     var sout,
     lendelim;
     sout = "";
     var spv = Split(strmv, delim);
     var stot,
     scnt,
     sitem;
     lendelim = Len(delim);
     stot = spv.length - 1;
     for (scnt = 0; scnt <= stot; scnt++) {
          sitem = LCase(spv(scnt));
          if (sitem != sremove) {
               sout = sout + spv(scnt) + delim;
              }
             }
             sout = Left(sout, Len(sout) - lendelim);
             return sout;
}

MvSearch(searchvalues, strsearch, delim) - 返回分隔 string 中子项的位置。

function MvSearch(searchvalues, strsearch, delim) {
     if (Len(searchvalues) == 0) {
          return -1;
         }
         var spvalues,
         i,
         itot,
         ivalue;
         spvalues = Split(searchvalues, delim);
         strsearch = LCase(strsearch);
         itot = spvalues.length - 1;
         for (i = 0; i <= itot; i++) {
              ivalue = spvalues[i];
              ivalue = LCase(ivalue);
              if (ivalue == strsearch) {
                   return i;
                  }
                 }
                 return -1;
}

UCase(str) - 返回一个 string 或字符,其中包含转换为大写的指定 string

function UCase(str) {
     return str.toUpperCase();
}

Trim(str) - 返回一个 string,其中包含指定 string 的副本,没有前导或尾随空格。

function Trim(str) {
     return str.trim();
}

ProperAmount(svalue) - 返回用于金额格式化的 string,四舍五入,例如 1,234,456 将返回 123456.00

function ProperAmount(svalue) {
     svalue = Replace(svalue, ",", "");
     svalue = svalue.toFixed(2);
     return svalue;
}

MvField(svalue, iposition, delimiter) - 返回分隔 string 中特定位置的子项。这从 1 开始。

function MvField(svalue, iposition, delimiter) {
     var mvalues,
     tvalues,
     xvalue;
     mvalues = Split(svalue, delimiter);
     tvalues = mvalues.length - 1;
     iposition = iposition - 1;
     if (iposition <= -1) {
          xvalue = mvalues[tvalues];
          return xvalue;
         }
         if (iposition > tvalues) {
              return "";
             }
             xvalue = mvalues[iposition];
             return xvalue;
}

email(t, subject, body) - 发送电子邮件。

function email(t, subject, body) {
     location = "mailto:" + encodeURI(t) + "?subject=" + encodeURI(subject) + "&body=" + encodeURI(body);
}

phone(tel) - 拨打电话。

function phone(tel) {
     location = "tel:" + tel;
}

skype(tel) - 进行 Skype 通话。

function skype(tel) {
     location = "skype:" + tel;
}

sms(tel, body) - 发送短信。

function sms(tel, body) {
     location = "sms:" + tel + "?body=" + encodeURL(body);
}

Alphabets(svalue) - 从字母数字 string 中返回字母 string

function Alphabets(svalue) {
     var sout,
     slen,
     i,
     schar,
     isnum;
     sout = "";
     slen = Len(svalue);
     schar = Mid(svalue, slen, 1);
     isnum = IsNumeric(schar);
     do {
          if (isnum == false)
          break;
          svalue = Left(svalue, slen - 1);
          slen = Len(svalue);
          schar = Mid(svalue, slen, 1);
          isnum = IsNumeric(schar);
         } while (0 < 1);
         return svalue;
}

MonthName(svalue) - 从给定数字返回月份名称。这从 1 开始。

function MonthName(svalue) {
     var month = new Array();
     month[1] = "January";
     month[2] = "February";
     month[3] = "March";
     month[4] = "April";
     month[5] = "May";
     month[6] = "June";
     month[7] = "July";
     month[8] = "August";
     month[9] = "September";
     month[10] = "October";
     month[11] = "November";
     month[12] = "December";
     return month(svalue);
}

CharAt(svalue, pos) - 返回 string 中特定位置的 string。这从 1 开始。

function CharAt(svalue, pos) {
     return svalue.charAt(pos - 1)
}

CharCodeAt(svalue, pos) - 返回 string 中指定位置字符的 Unicode。这从 1 开始。

function CharCodeAt(svalue, pos) {
     return svalue.charCodeAt(pos - 1)
}

DateIconv() - 返回当前系统日期作为数字。

function DateIconv() {
     var x = new Date();
        x = Number(x)
     return x;
}

ThisYear() - 返回当前系统年份。

function ThisYear() {
     var x = new Date();
     x = x.getFullYear();
     return x;
}

ThisWeekDay() - 返回当前系统星期几。这从 1 开始,并假定 Sunday 为一周的开始。

function ThisWeekDay() {
     var x = new Date();
     x = x.getDay() + 1;
     return x;
}

ThisWeekDayName() - 返回当前系统星期几的名称,并假定 Sunday 为一周的开始。

function ThisWeekDayName() {
     var x = new Date();
     var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
     x = days[x.getDay()];
     return x;
} 

ThisMonth() - 返回当前系统月份。这从 1 开始。

function ThisMonth() {
 var x = new Date();
 x = x.getMonth() + 1;
 return x;
}

ThisMonthName() - 返回当前系统月份名称。这从 1 开始。

function ThisMonthName() {
     var x = new Date();
     x = x.getMonth() + 1
     x = MonthName(x);
     return x;
} 

Concat(s1, s2) - 返回两个 string 的连接 string

function Concat(s1, s2) {
     var s = s1.concat(s2);
     return s;
}

IsArray(myArray) - 返回一个布尔值,指示传入的对象是否为数组。

function IsArray(myArray) {
        return myArray.constructor.toString().indexOf("Array") > -1;
}

IsDate(myDate) - 返回一个布尔值,指示传入的对象是否为 date

function IsDate(myDate) {
        return myDate.constructor.toString().indexOf("Date") > -1;
}

CInt(value) - 返回基于传入值的整数。

function CInt(value) {
     var x = Number(value);
     return x;
}

ThisTime() - 返回当前系统时间(毫秒)。

function ThisTime() {
     var x = new Date();
     x = x.getTime();
     return x;
}

Asc(str) - 返回给定 ASCII 字符 string 的 ASCII 码。

function Asc(str) {
     return str.charCodeAt(0);
}

format(str, col) - 格式化 string 的函数,例如 x = format('Tel {0}', 'mine'); 返回 'Tel mine'。

var format = function (str, col) {
     // format('Tel {0}', 'mine');
        col = typeof col === 'object' ? col : Array.prototype.slice.call(arguments, 1);
     
        return str.replace(/\{\{|\}\}|\{(\w+)\}/g, function (m, n) {
                if (m == "{{") { return "{"; }
                if (m == "}}") { return "}"; }
                return col[n];
         });
};

String.prototype.startsWith(x) - 返回一个布尔值,指示 string 是否以特定值开头。

String.prototype.startsWith = function(prefix) {
     return (this.substr(0, prefix.length) === prefix);
}

String.prototype.endsWith(x) - 返回一个布尔值,指示 string 是否以特定值结尾。

String.prototype.endsWith = function (suffix) {
     return (this.substr(this.length - suffix.length) === suffix);
}

String.prototype.format(x) - 返回一个格式化的 string,例如 '您的余额是 {0} 美元'.format(77.7)

String.prototype.format = String.prototype.f = function() {
     //'Your balance is {0} USD'.format(77.7)
        var s = this,
     i = arguments.length;
     
        while (i--) {
                s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
         }
            return s;
};

Date.prototype.adjust(part, amount) - 返回一个调整后的日期,例如 var d = new Date(); d.adjust('hours', -10);

Date.prototype.adjust = function(part, amount){
     //var d = new Date();
     //d.adjust('hour', -10);
     part = part.toLowerCase();
     
     var map = {
          years: 'FullYear', months: 'Month', weeks: 'Hours', days: 'Hours', hours: 'Hours',
          minutes: 'Minutes', seconds: 'Seconds', milliseconds: 'Milliseconds',
          utcyears: 'UTCFullYear', utcmonths: 'UTCMonth', weeks: 'UTCHours', utcdays: 'UTCHours',
          utchours: 'UTCHours', utcminutes: 'UTCMinutes', 
                     utcseconds: 'UTCSeconds', utcmilliseconds: 'UTCMilliseconds'
         },
         mapPart = map[part];
         
         if(part == 'weeks' || part == 'utcweeks')
         amount *= 168;
         if(part == 'days' || part == 'utcdays')
         amount *= 24;
         
         this['set'+ mapPart]( this['get'+ mapPart]() + amount );
         
         return this;
    }

Date.prototype.diff (date2, parts) - 返回日期 diff,例如 d1.diff(d2,'weeks');

Date.prototype.diff = function(date2, parts){
     //d1.diff(d2,'weeks');
     //d1.diff(d2,['months','weeks','days']);
     var d1 = new Date(this.getTime()),
     d2 = new Date(date2.getTime()),
     pm = d1 <= d2? 1 : -1,
     result = { },
     factors = { weeks: (1000*60*60*24*7), days: (1000*60*60*24), 
                 hours: (1000*60*60), minutes: (1000*60), seconds: 1000, milliseconds: 1 };
     
     if(parts === undefined)
     parts = ['years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds', 'milliseconds'];
     else if(typeof(parts) == "string")
     parts = [parts];
     
     for(var i=0, l=parts.length; i<l; i++){
          var k = parts[i];
          result[k] = 0;
          
          if(factors[k] === undefined){
               inaWhile: while( true ){
                    d2.adjust(k, -1*pm);
                    if( (pm === 1 && d1 > d2) || (pm === -1 && d1 < d2)){
                         d2.adjust(k, 1*pm);
                         break inaWhile;
                        }
                        result[k]++;
                       }
                      }
                      else{
                           var tmpDiff = Math.abs(d2.getTime() - d1.getTime());
                           result[k] = Math.floor(tmpDiff / factors[k]);
                           d2.adjust(k, result[k]*-1*pm);
                          }
                          result[k] *= pm;
                         }
                         
                         if(parts.length == 1)
                         return result[parts[0]];
                         return result;
}

DateAdd(ItemType, DateToWorkOn, ValueToBeAdded) - 返回一个基于添加间隔的日期。

function DateAdd(ItemType, DateToWorkOn, ValueToBeAdded)
{
        switch (ItemType)
        {
                //date portion        
                case 'd': //add days
          DateToWorkOn.setDate(DateToWorkOn.getDate() + ValueToBeAdded)
          break;
                case 'm': //add months
          DateToWorkOn.setMonth(DateToWorkOn.getMonth() + ValueToBeAdded)
          break;
                case 'y': //add years
          DateToWorkOn.setYear(DateToWorkOn.getFullYear() + ValueToBeAdded)
          break;
                //time portion        
                case 'h': //add days
          DateToWorkOn.setHours(DateToWorkOn.getHours() + ValueToBeAdded)
          break;
                case 'n': //add minutes
          DateToWorkOn.setMinutes(DateToWorkOn.getMinutes() + ValueToBeAdded)
          break;
                case 's': //add seconds
          DateToWorkOn.setSeconds(DateToWorkOn.getSeconds() + ValueToBeAdded)
          break;
         }
            return DateToWorkOn;
}

Today() - 从当前系统日期返回 YYYY-MM-DD 格式的 string

function Today() {
     var currentTime = new Date();
     var currentMonth = currentTime.getMonth();
     var currentDate = currentTime.getDate();
     var currentYear = currentTime.getFullYear();
     var tday = currentYear + "-" + currentmonth + "-" & currentDate;
     return tday;
}

Round(n,d) - 返回传入值的四舍五入数字。

function Round(n,d) {
     if (!d||d===null||d===""){
          d=0;
         }
            d = Math.floor(d);
         d = d<1?0:d;
         d=Math.pow(10,d);
         var result=Math.round(n*d)/d;
         return result;
}

WebSQL Javascript 函数

WebSQL 的常量使用

var DB_REAL = "REAL";
var DB_INTEGER = "INTEGER";
var DB_BLOB = "BLOB";
var DB_TEXT = "TEXT";
var DB_FLOAT = "FLOAT";
var DB_NUMERIC = "NUMERIC";

SqlOpenDb(shortName, version, displayName, maxSize) - 打开一个 WebSQL 数据库,将数据库作为对象返回。

示例var db = SqlOpenDb("School");

function SqlOpenDb(shortName, version, displayName, maxSize) {
     // code to open the database and returns a variable, one can open different
     // databases, database size is 1MB, increase dbsize to <= 5
        var db, dbsize = 1;
        try {
                if (!window.openDatabase) {
                        return 0;
                 } else {
                        if (typeof (shortName) === 'undefined') {
                                return 0;
                      }
                            if (typeof (version) === 'undefined') version = "";
                            if (typeof (displayName) === 'undefined') displayName = shortName;
                            if (typeof (maxSize) === 'undefined') maxSize = dbsize * (1024 * 1024);
                            db = openDatabase(shortName, version, displayName, maxSize);
                      }
                     } catch (e) {
                                return 0;
                         }
                            return db;
}

SqlExecute(db, sqlList) - 对 websql 数据库执行命令。sqlList 可以是 string / 命令数组。请参见下面的示例。

function SqlExecute(db, sqlList) {
     // code to execute array commands to the database
     // db is the variable holding the database reference
     // sqlList is an array of commands to execute
        db.transaction(function (transaction) {
          // loop through each sql command with success and error result
                for (var i = 0; i < sqlList.length; i++) {
                        // create a new scope that holds sql for the error message, if needed
                        (function (tx, sql) {
                                if (typeof (sql) === 'string') sql = [sql];
                                if (typeof (sql[1]) === 'string') sql[1] = [sql[1]];
                                var args = (typeof (sql[1]) === 'object') ? sql.splice(1, 1)[0] : [];
                                var sql_return = sql[1] || function () {};
                                var sql_error = sql[2] || function () {};
                    tx.executeSql(sql[0], args, sql_return, sql_error);
                   }(transaction, sqlList[i]));
                  }
                 });
}

SqlCreateTable(db, TableName, FieldsAndTypes, PrimaryKey, AutoIncrement) - 在现有数据库中创建表。

var tblStructure = {};
tblStructure.FullName = DB_TEXT;

示例SqlCreateTable(db, "Kids", tblStructure, "FullName", "");

 

function SqlCreateTable(db, TableName, FieldsAndTypes, PrimaryKey, AutoIncrement) {
     // code to create a table in the websql database
     // fieldsandtypes is a json object
     // autoincrement is the field name to autoincrement
        var sb = "(";
        for (item in FieldsAndTypes) {
                sb += "[" + item + "] " + FieldsAndTypes[item];
                if (item == PrimaryKey) {
                        sb += " NOT NULL PRIMARY KEY";
              }
                    if (item == AutoIncrement) {
                            sb += " AUTOINCREMENT";
                  }
                        sb += ", ";
                 }
                    sb = Left(sb, (Len(sb) - 2));
                    sb += ")";
                    sb = "CREATE TABLE IF NOT EXISTS [" + TableName + "] " + sb + ";";
                    return Execute(db, sb);
}

SqlAddColumns(db, TableName, FieldAndTypes) - 更新现有表的表结构。

function SqlAddColumns(db, TableName, FieldsAndTypes) {
     // code to add columns to the table in the database
        var sqlColumn = [];
     var strCol = '';
     //define fields to be added
        for (item in FieldsAndTypes) {
          strCol = "ALTER TABLE [" + TableName + "] _
                    ADD COLUMN [" + item + "] " + FieldsAndTypes[item] + ';';
          sqlColumn.push(strCol);
         }
            SqlExecute(db, sqlColumn);
}

SqlInsertRecord(db, tblName, tblRecord) - 向现有表添加新记录。

var tblKid = {};
tblKid.FullName = 'Usibabale Mbanga';

示例SqlInsertRecord(db, "Kids", tblKid);

function SqlInsertRecord(db, tblName, tblRecord) {
     // code to insert a record into the database
     // fields are passed as parameters
        var qry, flds = "", vals = "", avals = [];
     for (var key in tblRecord) {
          flds += "[" + key + "],";
          vals += "?,";
          avals.push(tblRecord[key]);
         }
         flds = Left(flds, Len(flds) - 1);
            vals = Left(vals, Len(vals) - 1);
            qry = "INSERT INTO [" + tblName + "] (" + flds + ") VALUES (" + vals + ");";
            return Execute(db, qry, avals);
}

SqlCreateIndexes(db, TableName, Indexes) - 在现有表中创建索引。

function SqlCreateIndexes(db, TableName, Indexes) {
     // code to create table index in the database
        var sb, idef, sqlCreateIdx = [], idxname, spidx, idxtot, idxcnt, idx;
        spidx = Split(Indexes, ",");
        idxtot = spidx.length - 1;
        //define indexes to be created
        for (idxcnt = 0; idxcnt <= idxtot; idxcnt++) {
                idx = spidx(idxcnt);
                idxname = TableName + "_" + idx;
                idef = "CREATE INDEX IF NOT EXISTS [" + idxname + "] _
                        ON [" + TableName + "] ([" + idx + "]);";
                sqlCreateIdx[idxcnt] = idef;
         }
            SqlExecute(db, sqlCreateIdx);
}

SqlUpdateRecordWhere(db, tblName, tblRecord, tblWhere) - 更新表中的现有记录。这将把名为 Usibabale MbangaKidage 设置为 3

var KidRec = {};
KidRec.Age = 3;
var KidUpdate = {};
KidUpdate.FullName = 'Usibabale Mbanga';

示例:SqlUpdateRecordWhere(db, "Kids", KidRec, KidUpdate)

function SqlUpdateRecordWhere(db, tblName, tblRecord, tblWhere) {
     // code to update a record on a database
     // tblRecord and tblWhere should be objects
        var qry = "", vals = "", wvals = "", avals = [];
        for (item in tblRecord) {
                vals += "[" + item + "] = ?,";
          avals.push(tblRecord[item]);
         }
            for (item in tblWhere) {
                    wvals += "[" + item + "] = ? AND ";
              avals.push(tblWhere[item]);
             }
                vals = Left(vals, Len(vals) - 1);
                wvals = Left(wvals, Len(wvals) - 5);
                qry = "UPDATE [" + tblName + "] SET " + vals + " WHERE " + wvals + ";";
                return Execute(db, qry, avals);
}

SqlGetRecordWhere(db, tblName, tblWhere) - 获取带有 select 条件的记录,与上述示例相同。

function SqlGetRecordWhere(db, tblName, tblWhere) {
     // code to get a record from database using a where clause
     // tblWhere should be objects
        var qry = "", vals = "", avals = [];
        for (item in tblWhere) {
                vals += "[" + item + "] = ? AND ";
          avals.push(tblWhere[item]);
         }
            vals = Left(vals, Len(vals) - 5);
            qry = "SELECT * FROM [" + tblName + "] WHERE " + vals + ";";
            return Execute(db, qry, avals);
}

Execute(db, qry, args) - 对数据库执行语句,请参见上述示例。

function Execute(db, qry, args){
     // execute a query against the database using defer
     if (typeof (args) === 'undefined') args = [];
        return $.Deferred(function (d) {
                db.transaction(function (tx) {
                        tx.executeSql(qry, args, successWrapper(d), failureWrapper(d));
                        });
                    });
};

ResultSetToJSON(results, PrimaryKey) - 将表中的 resultset 作为由指定 PrimaryKey 引用的 json 对象返回。

function ResultSetToJSON(results, PrimaryKey) {
        // process data returned by successWrapper;
     // return it as a json object using primary key as key
        var Records = {};
        var len = results.rows.length - 1, priKey, i, row;
        // loop through each row
        for (i = 0; i <= len; i++) {
          // get the row
                row = results.rows.item(i);
          // get the primary key
                priKey = row[PrimaryKey];
          // cleanse the primary key
          priKey = priKey.split(' ').join('-');
          // set row to object using primary key
                Records[priKey] = row;
            }
            return Records;
}

SqlDeleteRecordWhere(db, tblName, tblWhere) - 从表中删除现有记录。此函数的工作方式与上述 SqlUpdate 函数相同。

function SqlDeleteRecordWhere(db, tblName, tblWhere) {
        // delete a record from a table using a where clause
     // pass the where fields as parameters
        var qry, wvals = "", avals = [];
        for (item in tblWhere) {
                wvals += "[" + item + "] = ? AND ";
          avals.push(tblWhere[item]);
         }
         // remove last ' AND '
            wvals = Left(wvals, Len(wvals) - 5);
            qry = "DELETE FROM [" + tblName + "] WHERE " + wvals + ";";
            return Execute(db, qry, avals);
};

关注点

尽管 JavaScript 是一种相当容易理解的编程语言,但有时人们希望简化和更简单的方法来完成事情,尤其是反复执行相同的功能。我发现将我的脚本整合到一个单一的基础中,我可以更轻松地在我的项目中使用 js 文件而不会出现问题。一旦有任何增强,该函数就会在一个位置进行更改。您还可以参考我在此处发布的文章,了解我是如何使用其中一些函数的:这里

© . All rights reserved.