烂漫时空

用JScript实现公历到农历的日期转换

本文介绍了用查表法实现的公历到农历日期转换的方法,给出了实用的JScript脚本。
可接受的公历日期范围是2001-1-1至2050-12-31。

// 数组LunarDaysOfMonth存入农历2001年到2050年每年中的月天数信息

// 农历每月只能是29或30天,一年用12(或13)个二进制位表示,从高到低,对应位为1表示30天,否则29天

var LunarDaysOfMonth = new Array

(

    0xd4a8, 0xd4a0, 0xda50, 0x5aa8, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, // 2001-2010

    0xb4a0, 0xb550, 0xb550, 0x55a8, 0x4ba0, 0xa5b0, 0x52b8, 0x52b0, 0xa930, 0x74a8, // 2011-2020

    0x6aa0, 0xad50, 0x4da8, 0x4b60, 0x9570, 0xa4e0, 0xd260, 0xe930, 0xd530, 0x5aa0, // 2021-2030

    0x6b50, 0x96d0, 0x4ae8, 0x4ad0, 0xa4d0, 0xd258, 0xd250, 0xd520, 0xdaa0, 0xb5a0, // 2031-2040

    0x56d0, 0x4ad8, 0x49b0, 0xa4b8, 0xa4b0, 0xaa50, 0xb528, 0x6d20, 0xada0, 0x55b0  // 2041-2050

);

 

// 数组LunarLeapYear存放农历2001年到2050年闰月的月份,如没有则为0,从高到低,每字节存两年

var LunarLeapYear = new Array

(

    0x40, 0x02, 0x07, 0x00, 0x50, // 2001-2010

    0x04, 0x09, 0x00, 0x60, 0x04, // 2011-2020

    0x00, 0x20, 0x60, 0x05, 0x00, // 2021-2030

    0x30, 0xb0, 0x06, 0x00, 0x50, // 2031-2040

    0x02, 0x07, 0x00, 0x50, 0x03  // 2041-2050

);

 

 

// 返回农历iLunarYear年的闰月月份,如没有则返回0

function GetLeapMonth(iLunarYear)

{

    var Leap = LunarLeapYear[(iLunarYear - 2001) >> 1];

    return (((iLunarYear - 2001) & 1) == 0) ? (Leap >> 4) : (Leap & 0x0f);

}

 

// 返回农历iLunarYer年iLunarMonth月的天数,结果是一个长整数

// 如果iLunarMonth不是闰月, 高字为0,低字为该月的天数

// 如果iLunarMonth是闰月, 高字为后一个月的天数,低字为前一个月的天数

function LunarMonthDays(iLunarYear, iLunarMonth)

{

    var High;

    var Low;

    var Bit;

 

    High = 0;

    Low = 29;

    Bit = 16 - iLunarMonth;

    if ((iLunarMonth > GetLeapMonth(iLunarYear)) && (GetLeapMonth(iLunarYear) > 0))  Bit--;

    if ((LunarDaysOfMonth[iLunarYear - 2001] & (1 << Bit)) > 0)  Low++;

    if (iLunarMonth == GetLeapMonth(iLunarYear))

    {

        High = ((LunarDaysOfMonth[iLunarYear - 2001] & (1 << (Bit-1))) > 0) ?  30 : 29;

    }

 

    return Low + (High << 16);

}

 

// 返回农历iLunarYear年的总天数

function LunarYearDays(iLunarYear)

{

    var Days;

    var tmp;

 

    Days = 0;

    for (var i=1; i <= 12; i++)

    {

        tmp = LunarMonthDays(iLunarYear, i);

        Days = Days + ((tmp >> 16) & 0xffff); //取高位

        Days = Days + (tmp & 0xffff); //取低位

    }

 

    return Days;

}

 

// 将农历iLunarYear年格式化成天干地支记年法表示的字符串

function FormatLunarYear(iLunarYear)

{

    var szText1 = new String("甲乙丙丁戊己庚辛壬癸");

    var szText2 = new String("子丑寅卯辰巳午未申酉戌亥");

    var strYear;

 

    strYear = szText1.substr((iLunarYear - 4) % 10, 1);

    strYear = strYear + szText2.substr((iLunarYear - 4) % 12, 1);

 

    return strYear + "年";

}

 

// 将农历iLunarMonth月格式化成农历表示的字符串

function FormatLunarMonth(iLunarMonth)

{

    var szText = new String("正二三四五六七八九十");

    var strMonth;

 

    if (iLunarMonth <= 10)

    {

        strMonth = szText.substr(iLunarMonth - 1, 1);

    }

    else if (iLunarMonth == 11) strMonth = "十一";

    else strMonth = "十二";

 

    return strMonth + "月";

}

 

// 将农历iLunarDay日格式化成农历表示的字符串

function FormatLunarDay(iLunarDay)

{

    var szText1 = new String("初十廿三");

    var szText2 = new String("一二三四五六七八九十");

    var strDay;

    if ((iLunarDay != 20) && (iLunarDay != 30))

    {

        strDay = szText1.substr((iLunarDay - 1) / 10, 1) + szText2.substr((iLunarDay - 1) % 10, 1);

    }

    else if (iLunarDay != 20)

    {

        strDay = szText1.substr(iLunarDay / 10, 1) + "十";

    }

    else

    {

        strDay = "二十";

    }

 

    return strDay;

}

 

// 将公历日期转换为农历日期,返回农历表示的字符串

function GetLunarDateString(SolarDate)

{

    var tmp;

    var iLunarYear;

    var iLunarMonth;

    var iLunarDay;

    var Leap = false;

    var MinMilli = 1000 * 60;

    var HrMilli = MinMilli * 60;

    var DyMilli = HrMilli * 24;

 

    // 从2001年1月1日算起,给定的公历日期已经过去的天数

    // 11323是1970年1月1日到2001年1月1日之间的天数,因为Date是从1970年1月1日作为起点的

    var iSpanDays = Math.round(SolarDate.getTime() / DyMilli) - 11323;

 

    // 公历2001年1月24日为农历2001年正月初一,差23天

    if (iSpanDays < 23)

    {

        iYear = 2000;

        iLunarMonth = 12;

        iLunarDay = iSpanDays + 7;

    }

    else

    {

        // 从农历2001年正月初一算起

        iSpanDays = iSpanDays - 23;

        iLunarYear = 2001;

        iLunarMonth = 1;

        iLunarDay = 1;

 

        // 计算农历年

        tmp = LunarYearDays(iLunarYear);

        while (iSpanDays >= tmp)

        {

            iSpanDays -= tmp;

            iLunarYear++;

            tmp = LunarYearDays(iLunarYear);

        }

 

        // 计算农历月

        tmp = LunarMonthDays(iLunarYear, iLunarMonth) & 0xffff; //取低字

        while (iSpanDays >= tmp)

        {

            iSpanDays -= tmp;

            if (iLunarMonth == GetLeapMonth(iLunarYear))  // 该年该月闰月

            {

                tmp = LunarMonthDays(iLunarYear, iLunarMonth) >> 16; //取高字

                if (iSpanDays < tmp)

                {

                    Leap = (tmp > 0) ? true : false;  // 闰月的后个月?

                    break;

                }

                iSpanDays = iSpanDays - tmp;

            }

 

            iLunarMonth++;

            tmp = LunarMonthDays(iLunarYear,iLunarMonth) & 0xffff; //取低字

        }

 

        // 计算农历日

        iLunarDay += iSpanDays;

    }

 

    return FormatLunarYear(iLunarYear) + (Leap ? "闰" : "") + FormatLunarMonth(iLunarMonth) + FormatLunarDay(iLunarDay);

}


调用方法举例如下:

var today= new Date();   // 今天是2004-3-5

var str = GetLunarDateString(today);


结果是 “甲申年二月十五”。

再举两个例子:

var date1 = new Date(2008, 9, 1);     // 2008-10-1

var date2 = new Date(2050, 4, 18);    // 2050-5-18

var str1 = GetLunarDateString(date1);

var str2 = GetLunarDateString(date2);


结果分别是 “戊子年九月初三” 和 “庚午年闰三月廿八”。

注意在Date中,月的范围是0-11。

posted @ 2005-11-25 16:57 烂漫时空 阅读(257) | 评论 (0) | 编辑 收藏
 
Windows XP 组策略之安全篇

有时候我们的电脑会被其他来用户使用,
或许你的某些资料不想被别人看到,
或者别人会在不经意间更改了你的系统设置,
有没有好的办法防止呢?
我们知道在注册表中我们可以更改系统的很多设置,
但修改起来很麻烦,而组策略把各种配置模块集中在一起,
方便了用户的设置。

打开方式:运行——gpedit.msc

需要说明的是这里的“计算机配置”是对整个计算机中的系统配置进行设置的,是对计算机中所有用户的运行环境起作用;而“用户配置”则是对当前用户的系统配置进行设置的,它仅对当前用户起作用,步入正题。

1、隐藏电脑的驱动器
位置:用户配置\管理模板\Windows组件\Windows资源管理器\

启用后,发现我的电脑里的磁盘驱动器全不见了,但在地址栏输入盘符后,仍然可以访问,如果再把下面的防止从“我的电脑”访问驱动器设置为启用,在地址栏输入盘符就无法访问了,但在运行里直接输入cmd,在Dos下仍然可以看见,接下来就是把CMD命令也禁用了。
位置:用户配置\管理模板\系统\

2、禁用注册表
位置:用户配置\管理模板\系统\

3、禁用控制面板
位置:用户配置\管理模板\系统\

如果你只想显示隐藏某些配置,就选择下面的

如想在控制面板中隐藏Internet选项,则在隐藏控制面板程序里添加Inetcpl.cpl,具体名称可查看Windows\System32里以cpl结尾的文件。

4、隐藏文件夹
平时我们隐藏文件夹后,别人只需在文件夹选项里显示所有文件,就可以看见了,我们可以在组策略里删除这个选项:
位置:用户配置\管理模板\Windows组件\Windows资源管理器\

5、关闭缩略图缓存
有时我们在文件夹中放过图片,后来移除了,但以缩略图缓存仍然能被其他人读取。
位置:用户配置\管理模板\Windows组件\Windows资源管理器\

6、去除开始菜单中的“文档”菜单
开始菜单中的文档一栏,会记载我们曾经编辑过的文档,我们可以去掉这个菜单:
位置:用户配置\管理模板\Windows组件\任务栏和“开始”菜单\

7、隐藏‘屏幕保护程序“”选项卡
有时我们设置了屏幕密码保护,但很容易被人修改,我们可以隐藏这一选项。
用户配置\管理模板\控制面板\显示、

8、禁止更改TCP/IP属性
我们设定的IP地址可能会被更改,那么只要关闭它的属性页就可以了。
位置:用户配置\管理模板\网络\网络连接
把下面两项设为启用:

9、删除任务管理器
可别小看了任务管理器,它除了可以终止程序、进程外还可以重启、关机,搜索程序的执行文件名,及更改程序运行的优先顺序。
位置:用户配置\管理模板\系统\C trl+Alt+Del选项\

10、禁用“添加/删除程序”
阻止其他用户通过它来安装或卸载程序,可利用组策略来实现。
位置:用户配置\管理模板\控制面板\添加/删除程序

11、禁用IE“工具”菜单下的“Internet选项”
为了阻止别人对IE浏览器设置的随意更改。
位置:用户配置\管理模板\ Windows组件\ Internet Explorer \浏览器菜单

12、只运行许可的Windows应用程序
如果您启用这个设置,用户只能运行您加入“允许运行的应用程序列表”中的程序。

总的来说,组策略功能强大,还有很多功能,就靠你自己慢慢挖搅了,最后补充一下,为了防止其它用户通过组策略来更改我们的设置,可以在System32下把gpedit.msc更名,比如改为myedit.msc,不影响正常使用。

posted @ 2005-11-19 18:02 烂漫时空 阅读(208) | 评论 (0) | 编辑 收藏
 
验证身份证号ASP代码函数如下
Function IDCheck(e)
IDCheck = true
arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")
Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")
Checker = Split("1,9,8,7,6,5,4,3,2,1,1", ",")
If Len(e) < 15 Or Len(e) = 16 Or Len(e) = 17 Or Len(e) > 18 Then
'IDCheck= "身份证号共有 15 码或18位"
IDCheck = False
Exit Function
End If
Dim Ai
If Len(e) = 18 Then
Ai = Mid(e, 1, 17)
ElseIf Len(e) = 15 Then
Ai = e
Ai = Left(Ai, 6) & "19" & Mid(Ai, 7, 9)
End If
If Not IsNumeric(Ai) Then
'IDCheck= "身份证除最后一位外,必须为数字!"
IDCheck = False
Exit Function
End If
Dim strYear, strMonth, strDay
strYear = CInt(Mid(Ai, 7, 4))
strMonth = CInt(Mid(Ai, 11, 2))
strDay = CInt(Mid(Ai, 13, 2))
BirthDay = Trim(strYear) + "-" + Trim(strMonth) + "-" + Trim(strDay)
If IsDate(BirthDay) Then
If DateDiff("yyyy",Now,BirthDay)<-140 or cdate(BirthDay)>date() Then
'IDCheck= "身份证输入错误!"
IDCheck = False
Exit Function
End If
If strMonth > 12 Or strDay > 31 Then
IDCheck = False
'IDCheck= "身份证输入错误!"
Exit Function
End If
Else
'IDCheck= "身份证输入错误!"
IDCheck = False
Exit Function
End If
Dim i, TotalmulAiWi
For i = 0 To 16
TotalmulAiWi = TotalmulAiWi + CInt(Mid(Ai, i + 1, 1)) * Wi(i)
Next
Dim modValue
modValue = TotalmulAiWi Mod 11
Dim strVerifyCode
strVerifyCode = arrVerifyCode(modValue)
Ai = Ai & strVerifyCode
IDCheck = Ai
If Len(e) = 18 And e <> Ai Then
'IDCheck= "身份证号码输入错误!"
IDCheck = False
Exit Function
End If
End Function
posted @ 2005-11-19 17:48 烂漫时空 阅读(458) | 评论 (0) | 编辑 收藏
 
FLASH的全屏播放技术

   一、不用浏览器直接用Flash播放器播放:
  A.不显示Flash播放器菜单栏的全屏(类似屏保效果),在第一帧处的Actions用FS Command命令,在For standalone player选项中选择fullscreen,这时就会看到arguments中为true,Command中是fullscreen。运行中可按ESC退出或设一按钮在Actions上,用FS command在For standalone player选项中选择quit也可退出。附带说一句:For standalone player上的所有选项只适合于用Flash播放器播放的情况。在浏览Flash动画时,如果按CTRL+F键,可实现全屏与非全屏的切换。
  B.如果仅是要使swf文件占满Flash播放器的窗口,什么也不需要做。直接击swf文件。
  以上一类全屏多用在非互联网环境的运行。

  二、在非Flash播放器(如IE)中运行:
  A.只占满浏览器:这种情况相对简单,不管你制作的Flash大小是否为800×600,只要在调用swf文件的HTML中将WIDTH和HEIGHT的参数设为100%即可,当然也可以在Flash导出HTML文件的设置中进行设置,方法是:打开File菜单;选Publish Settings弹出导出设置对话框;在HTML标签下的Dimensions选项,下拉后选中Percent(百分比),并在WIDTH和HEIGHT框中填100,运行这个与swf同名的HTML文件则与直接加语句效果相同。这种占满浏览器的全屏与swf文件的设置无关,但最好设置的大小在700×400左右,否则容易导致图像(主要是在Flash中调用的位图)、汉字的失真。
  B.不显示浏览器菜单栏、工具栏的全屏。这种全屏稍稍复杂,与Flash的设置无关,但要借助JavaScript来完成。方法是:在HTML文件中的与之间加入以下代码
  也可以在swf文件的第一帧Actions上的URL命令上加上
  javascript:window.open(〃*.swf〃,〃〃,〃fullscreen=1,menubar=no,width=800,height=600〃)
  这种全屏类似屏保,用ALT+F4或设置按钮退出。把fullscreen设为=0,则是显示浏览器菜单栏、工具栏的全屏。(注:*.swf是你所要显示的Flash动画的文件名)
  好了,关于全屏的方法就是如此,你根据自己的需要试试看(以上各例均在IE5.0中通过)。

posted @ 2005-11-18 16:00 烂漫时空 阅读(260) | 评论 (0) | 编辑 收藏
 
无提示关闭窗口

两种无提示关闭窗口的方法!
第一种:
<object id="clo" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
          <param name="Command" value="Close">
</object>
<a href="#" onClick="clo.Click()"><font size="3">关闭窗口</font></a>
  
可这种方法,在当计算机没有安装outlook时就会提示‘只能在什么帮肋’里能用
第二种:
<script type="text/javascript" language="javascript">
<!--
    function WinClose() 
      {
      window.opener=null;
      window.close();
    }
-->
</script>
然后调用:
<input type="button" value="关闭窗口" onclick="WinClose()">
请问这种方法和直接使用onclick="window.close()"有什么不同?谢谢!

posted @ 2005-11-13 21:39 烂漫时空 阅读(340) | 评论 (2) | 编辑 收藏
 
仅列出标题
共3页: 上一页 1 2 3 下一页 
 
<2025年8月>
日一二三四五六
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

 导航

  • BlogJava
  • 首页
  • 发新随笔
  • 发新文章
  • 联系
  • 聚合
  • 管理

 统计

  • 随笔: 16
  • 文章: 13
  • 评论: 143
  • 引用: 0

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(3)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

文章分类

  • 娱乐(1) (rss)
  • 电子书籍 & 软件下载(5) (rss)
  • 网络学习(3) (rss)
  • 网页编程(2) (rss)

知名技术网站

  • GooGle搜索
  • 红帽子中文网站可参考以下地址: www.redhat.com
  • Redhat linux 中文网站
  • 红帽子中文网站可参考以下地址: www.redhat.com
  • 微软中文MSDN
  • 微软中国网站. 可参考官方网站: www.microsoft.com/china/msdn/

搜索

  •  

最新随笔

  • 1. 个人电脑防黑设置
  • 2. 央视家庭影院
  • 3. 谨此献给网页设计师们:
  • 4. 用CSS制作树状目录
  • 5. 禁用net user

最新评论

  • 1. re: 禁用net user
  • 我去你妈的,坑逼,搞得所有用户都连接不上了
  • --我是你大爷
  • 2. re: 禁用net user
  • WHAT THE FUCK!
  • --SB
  • 3. re: 个人电脑防黑设置
  • 评论内容较长,点击标题查看
  • --托福在线,出国考英语直通车http:// 申请友情连接
  • 4. re: ASP制作留言簿所需的资料!
  • 评论内容较长,点击标题查看
  • --托福在线,出国考英语直通车http:// 申请友情连接
  • 5. 企业网站大家庭 优秀企业网站欣赏
  • 评论内容较长,点击标题查看
  • --企业网站大家庭 优秀企业网站欣赏

阅读排行榜

  • 1. 禁用net user(5195)
  • 2. Dreamweaver中Flash参数设置(1561)
  • 3. 去掉IE横向滚动条 (1023)
  • 4. 央视家庭影院(802)
  • 5. 用CSS制作树状目录(586)

Powered by: 博客园
模板提供:沪江博客
Copyright ©2025 烂漫时空