月度存档: 三月 2008

JavaScript 中为 Date 类实现 DateAdd 方法

JavaScript 中的并没有提供像 VBScript 里的 DateAdd 方法用于日期的操作,像加一年,减一个月什么的,这在服务端经常用到,比如设置 Cookie 的到期时间为现在时间的后一年,那么就需要使用这个方法了。

虽然 JavaScript 中没有 DateAdd 方法,但是 Date 类却有设置年月日时分秒的方法,比如 setFullYear、setMonth 之类的,而且,这些个方法的参数是可以为负的,在设置之后, Date 类会自行进行调整,每个月是30天还是31天,年份是不是闰年都不用我们来管了,只管设置值就是。

有了这个特性之后,我们就可以很方便的来为 Date 类添加 add 方法了。之所以不添加一个 DateAdd 方法而是给 Date 类添加一个 add 方法是因为我觉得那样更加方便,当然你也可以将 Date 类的 add 方法转换成为一个全局函数 DateAdd。

为了对每一个 Date 类的实例都有效,这里用到了 prototype 对象。

在 VBScript 里的 DateAdd 方法是用一个字符串来控制所加的量是年还是月还是其他的,所以在这里我也模仿 VBScript 里的 DateAdd 方法,使用一个字符串来控制所加量对应的部分,比如 y 代表年,m 代表月。

最后得到的代码如下:

  • Date.prototype.add = function(part, value) {
  • value *= 1;
  • if(isNaN(value)) {
  • value = 0;
  • }
  • switch(part) {
  • case “y”:
  • this.setUTCFullYear(this.getUTCFullYear() + value);
  • break;
  • case “m”:
  • this.setUTCMonth(this.getUTCMonth() + value);
  • break;
  • case “d”:
  • this.setUTCDate(this.getUTCDate() + value);
  • break;
  • case “h”:
  • this.setUTCHours(this.getUTCHours() + value);
  • break;
  • case “n”:
  • this.setUTCMinutes(this.getUTCMinutes() + value);
  • break;
  • case “s”:
  • this.setUTCSeconds(this.getUTCSeconds() + value);
  • break;
  • default:
  • }
  • }

代码里的 getUTCFullYear 等等也可以换成通常用的 getFullYear,因为是相对调整,所以用哪一个是没有区别的。

希望此文对你有所帮助。

xujiwei

[ASP] 解决 JScript 中使用日期类型数据时出现类型错误的问题

在服务端JScript中,有些时候需要使用日期类型的数据,比如说设置一个cookie的到期时间,更新数据库中的日期字段等。但是按照平常的方法来用js里的date类型数据时,运行时就会发生错误。

例如以下代码:

  • <%@LANGUAGE=”JScript” CODEPAGE=”65001″%>
  • <script language=”JScript” runat=”server”>
  • Response.Cookies(“xujiwei”)(“name”) = “xujiwei”;
  • Response.Cookies(“xujiwei”)(“gender”) = “male”;
  • var expiredDate = new Date(2008, 11, 31);
  • Response.Cookies(“xujiwei”).Expires = expiredDate;
  • </script>

在浏览器中打开之后,就会出现以下错误:

Microsoft JScript 运行时错误 错误 ‘800a000d’

类型不匹配

/temp/test.asp,行 6

这就意味着,我们按照类似在VBScript里的使用日期类型数据的方法在JScript不再行得通,但是我们总是需要在服务端中使用日期类型数据的,如果操作数据库是采用参数化Command的方式的话,那么需要使用日期类型数据的地方会更多,总不能因为不能使用常规方法来添加一个日期参数而把它放在SQL语句里吧。

幸好,JScript的设计者们考虑到了这一点。JScript在服务端使用时,往往是做为ASP的另一种脚本语言,而JScript则是微软在JavaScript上发展而来的微软自己的东西,考虑到这一点也是应该的。

在JScript中,解决这一问题的关键就是,Date类型的对象提供了一个函数getVarDate,它在JScript语言参考的说明如下:

当与 COM 对象、ActiveX® 对象或其他以 VT_DATE 格式接受和返回日期值的对象(例如 Visual Basic 和 VBScript)进行交互时,使用 getVarDate 方法。实际格式取决于地区设置,不随 JScript 变化。

好了,到现在问题的解决方法也已经浮出水面,就是使用getVarDate()函数将Date类型对象转换成可以与ASP中内置对象Response等可以交互的日期类型对象,那么将一开始的代码修改如下:

  • <%@LANGUAGE=”JScript” CODEPAGE=”65001″%>
  • <script language=”JScript” runat=”server”>
  • Response.Cookies(“xujiwei”)(“name”) = “xujiwei”;
  • Response.Cookies(“xujiwei”)(“gender”) = “male”;
  • var expiredDate = new Date(2008, 11, 31);
  • Response.Cookies(“xujiwei”).Expires = expiredDate.getVarDate();
  • </script>

再在浏览器打开这个测试页面的时候,就不再会有错误信息出现,说明客户端的Cookies成功写入并设置了到期时间为2008年12月31日。

希望此文对你有所帮助。

xujiwei

Windows 下配置 CVS 服务器

在进行团队项目开发的过程当中,源代码版本控制是不可缺少的部分,我目前用过的代码版本控制工具就两个,Visual Source Safe和CVS,呃,准确来说,CVS是昨天才开始用的。

本来,我是一直用着VSS的,比较方便,直接集成在VSS里面,但是目前在写的XBS是ASP的,Visual Studio里没有ASP的项目,不像PHP可以有个vs.php,所以比较麻烦,一直用EditPlus来写XBS。前两天因为一个项目用PHP的,又想到了Eclipse有个PDT的,就去下了个已经配置好的开发PHP的Eclipse IDE,然后想要弄个代码版本控制工具,就想到了CVS这个开源界鼎鼎有名的东西,立马上网去搜,找到了for Windows的版本:cvsnt。

cvsnt是cvs Windows版本的服务端程序,提供基于 TCP/IP 协议的 CVS 服务,可以在http://www.cvsnt.org/下载到。找到了服务器程序后,找了几天篇教程,就开始配置CVS服务器。

准备工作

从http://www.cvsnt.org/下载cvsnt,我下载的版本是2.5.04。

安装cvsnt

直接双击运行cvsnt安装文件,安装过程中可以选择以经典、自定义和完全三种方式安装,在自定义方式中可以选择安装路径。安装完成后,在控制面板里出现一个CVSNT Server的项目,图标是一条鱼~~

配置cvsnt

安装完成cvsnt后,就可以从控制面板中那条鱼来配置cvsnt了。首先,你要新建一个目录用来存放cvs仓库,我用的是G:\CVSROOT。这里需要先了解两个概念:cvs仓库和模块。我是这样理解的,cvs仓库相当于VS里一个解决方案,它可以包含多个项目,即模块。

打开cvsnt的控制面板后,可以看到7个选项卡,分别是:Server Information,用于查看服务器信息及一些简单的统计信息;Respository configuration,配置CVS仓库,包括添加、删除等;Server Setting,配置服务器运行的一些参数,诸如端口、加密、压缩等选项;Capatiblity Options,有关兼容性的选项,在这里主要配置一个兼容非cvsnt客户端的版本响应为cvs 1.11.2;Plugins,插件配置,安装完成可以不用管的~;Advanced,安装完成后也不用管了;About,在这里可以管理cvsnt服务的状态,停止或启动cvsnt和cvsnt lock服务。

其实简单来说,custom换默认设置安装完成后,要设置的东西只有两个:cvs仓库和服务器设置。

服务器设置:设置Run as为系统管理员帐号Administrator,或者新建一个本地用户,专门用于cvs。使用一个新建的本地帐户的好处是可以使用NTFS的权限控制来保证服务器的安全。

CVS仓库设置:进入Respository configuration选项卡,点击Add,出现添加CVS仓库的对话框,Type选择Standard即可,然后在Location里输入之前新建的用于存放CVS仓库的文件夹,我用的是G:\CVSROOT,在Name里会自动转换成一个可以用的CVS仓库的别名,比如我用的是“/CVSROOT”,其他的都默认,确定后cvsnt会询问你所添加的CVS仓库目录没有初始化,是否进行初始化,点“是”就行了,cvsnt会自动初始化指定的目录,初始化完成之后,可以在里面看到一个CVSROOT的文件夹。

认证设置:配置完CVS仓库后,为了使CVS能使用帐号进行访问而不是使用windows用户,需要修改cvsnt的认证方式,在CVS仓库目录的CVSROOT目录里找到config文件,先把它的只读属性去掉,然后使用文本编辑器打开,将第一行的#SystemAuth=yes改成#SystemAuth=no。

用户设置:在CVSROOT目录里,新建一个passwd文件,用文本编辑器打开,添加两行内容:

cvsroot:

xujiwei:

可以把“xujiwei”改成你要用的用户名。

修改密码:添加了用户之后,最好把密码修改掉。修改密码需要在cmd中进行,首先打开一个cmd,设置一下cvsroot环境变量:

set cvsroot=:pserver:xujiwei@127.0.0.1/cvsroot

注意,这里的xujiwei是之前添加的用户名,/cvsroot是之前添加的CVS仓库的别名,如果你的设置不同,请把它们替换成自己的值,以后不再说明。

接着登录CVS服务器,因为添加用户时没有设置密码,因此可以不输入密码直接回车登录:

cvs login

修改密码:

cvs passwd

输入新密码和确认密码之后,就成功修改了用户的密码。

结语

我也是第一次使用cvs,因此如果文中有所错误还请指正。

by Xu Jiwei