JavaScript VB 函数






4.85/5 (10投票s)
将 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/YY
、MM/DD/YYYY
、MM-DD-YY
、MM-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)
- 根据传入的 month
、day
和 year
返回整数年龄。
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 Mbanga
的 Kid
的 age
设置为 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 文件而不会出现问题。一旦有任何增强,该函数就会在一个位置进行更改。您还可以参考我在此处发布的文章,了解我是如何使用其中一些函数的:这里。