嗨,新朋友,很高兴认识你,欢迎来到我的博客。

Discuz7.2在Firefox3.6不显示主题分类,源码,用户名的解决方法

解决discuz7.2论坛在firefox火狐3.6版本下分类信息和主题分类下拉框无法显示的问题
问题描述:
discuz7.2,在用Firefox/3.6版本发布主题时:
1.如果只开启了分类信息或主题分类,则不显示后面下拉选项。
2.如果同时开启了分类信息和主题分类,则只显示前面的分类信息选项。
3.还有,编辑器右侧的“源码”切换选项也不见了;

正解:
此问题为FF3.6的兼容问题。

修复方法:
在include\js\common.js中
找到 BROWSER.firefox 一行中的
document.getBoxObjectFor &&
去掉后,后台更新缓存。

调程序的小女孩

实验室里冷极了,没有窗户,不知道是白天还是黑夜。这是一周的最后一天——周末。在这又冷又黑的晚上,一个蓬头散发的小女孩在工位上坐着。她从家里出来的时候还穿着一件外套,但是有什么用呢?那是一件很大的外套──那么大,不知是哪一年买的。她工作的时候的,就把它脱掉了,实验室的师弟嘲笑说,可以拿它当抹布。

小女孩只好一个人做实验,一双小脚冻得红一块青一块的。她的破显示器屏幕上有一大段程序,手里草稿纸上还有一大段。这一整天,程序还是没调过,谁也没帮过她。

可怜的小女孩!她又冷又饿,哆哆嗦嗦地调程序。显示器的光落在她的干枯的长头发上,那头发卷曲着披在肩上,看上去很久没梳,不过她没注意这些。每个桌上都堆满了论文,实验室飘着一股油墨的香味,因为这是论文deadline的时间——她可忘不了这个。

她在一行代码上停了下来,蜷着趴在桌子上。她觉得更冷了。她不敢跟老板说,因为她程序没调过,没拿到一个数据,老板一定会骂她的。再说,换做别的题目跟这个一样难。她们头上只有paper,虽然网上可以下到一些现成的代码,还是仍然没法用。

她的头脑几乎绝望了。啊,哪怕一次小小的成功,对她也是有好处的!她敢把上万行的代码修改一遍。编译运行一下,来找找问题么?她终于按下回车键开始运行。哧!程序开始输出信息了!一行一行的log开始出来了!她把小手拢在显示器上。多么温暖多么明亮的字符啊,简直像一支小小的蜡烛。这是一道奇异的火光!小女孩觉得自己好像 坐在一个19寸液晶大显示器前面,显示器还是全新锃亮的,颜色鲜艳,字迹清晰,上边显示着程序输出的正确结果,多么舒服啊!哎,这是怎么回事呢?她刚把头伸出去,想看的仔细一些,程序crash了,大显示器不见了。她坐在那儿,眼前的破显示器上一行刺眼的segment fault。

她又编译了一遍运行。程序又开始输出信息了,给出log了。显示器的光落在桌子上,那儿忽然变得像打印出来的paper那样洁白工整,她可以一直看到paper上的字迹。IEEE的logo,会议名称和日期,Abstract和Instroduction。更妙的是这篇paper的一作, 赫然署着自己的名字!看上去那么诱惑,一直向这个穷苦的小女孩走来。这时候,程序又crash了,她面前只剩一张又硬又旧的桌子。

她又运行了一遍。这一回,她感觉自己坐在布置整齐的会议室里。条幅上写着“博 士毕业答辩”,比她去年师姐毕业时用的条幅还要大,还要美。红色的条幅上贴着那几个白色的黑体字,投影仪屏幕上许多幅美丽的彩色画片,跟顶级会议里的 presentation 一个样,在向她眨眼睛。小女孩向画片伸出手去。这时候,程序又crash了。只见ppt上 的图片越升越高,最后成了在天空中闪烁的星星。有一颗星星落下来了,在天空中划出了一道细长的红光。

“有一个什么人快要死了。”小女孩说。唯一疼她的师姐毕业前的时候告诉过她:一颗星星落下来,就有一个灵魂要到图灵那儿去了。

她又编译了一遍。这一回,她把所有的数组size都设大了。师姐出现在亮光里,是那么温和,那么慈爱。

“师姐!”小女孩叫起来,“啊!请把我带走吧!我知道,程序一crash,您就会不见的,像那漂亮的显示器,发表的paper,布置好的答辩会议室一个样,就会不见的!”

她赶紧按了回车键,要把师姐留住。一大堆输出信息发出强烈的光,把实验室照得跟白天一样明亮。师姐从来没有像现在这样高大,这样美丽。师姐把小女孩抱起来,搂在怀里。她们俩在光明和快乐中飞走了,越飞越高,飞到那没有代码,没有论文,也没有毕业的地方去了。

第二天清晨,这个小女孩坐在工位上,两腮通红,嘴上带着微笑。她死了,在周末的实验室累死了。新一周的太阳升起来了,照在她小小的尸体上。小女孩坐在那儿,手还按着在不知用过多少年的键盘上。

“她想自己把程序调一下……”人们说。谁也不知道她曾经看到过多么美丽的东西 ,她曾经多么幸福,跟着她师姐一起走向新世界的幸福中去。

wordpress代码高亮插件wp-codebox使用方法(语法详解)

引用地址:http://www.seoxj.com/wordpress-wp-codebox-141/

wp-codebox是一个国人制作的代码高亮显示插件,支持多种语言、代码下载、复制到剪贴板、代码框收放及后台默认属性设置)wp-codebox语法非常的简单,下面就为大家介绍wordpress代码高亮插件wp-codebox使用方法(包含语法详解)。

wp-codebox最新版下载地址:http://wordpress.org/extend/plugins/wp-codebox/

WP-CodeBox安装:

1.下载WP-CodeBox插件,将压缩包解压后,把文件夹上传到wp-content/plugins/目录下。
2.登录WordPress管理后台,点击“插件”找到上传的插件WP-CodeBox,激活该插件。
3.WP-CodeBox插件激活后,在“设置”–>“WP-CodeBox“中设置相关信息

WP-CodeBox语法:

<pre  lang=”LANGUAGE” line=”N” file=”download.txt” colla=”+”>代码内容</pre>

lang=”LANGUAGE”:LANGUAGE代表代码的语言,如ASP、PHP、Java等

file=”download.txt”:创建一个可下载的保存名称,这里的download.txt表示是下载文件的文件名(注:此文件由WP-CodeBox插件自动生成)。

line=”N”:开始行数。

colla=”+或者-”:” +“表示显示时展开代码,”-“表示显示时收缩代码。

wp-codebox使用方法:

在插入代码前,将wordpress 编辑器切换为“HTML编辑”模式,按上面语法插入代码即可!

WP-CodeBox插件示例代码:

<pre lang=”php”>
ecs_header(“Location: ./ “);
exit;
</pre>
效果如下:

ecs_header(“Location: ./);
exit;

js获取&设置cookie函数

设置cookie:

function setcookie(cookieName, cookieValue, seconds, path, domain, secure) {
	var expires = new Date();
	expires.setTime(expires.getTime() + seconds);
	document.cookie = escape(cookieName) + '=' + escape(cookieValue)
		+ (expires ? '; expires=' + expires.toGMTString() : '')
		+ (path ? '; path=' + path : '/')
		+ (domain ? '; domain=' + domain : '')
		+ (secure ? '; secure' : '');
}

读取cookie:

function getcookie(name) {
	var cookie_start = document.cookie.indexOf(name);
	var cookie_end = document.cookie.indexOf(";", cookie_start);
	return cookie_start == -1 ? '' : unescape(document.cookie.substring(cookie_start + name.length + 1, (cookie_end > cookie_start ? cookie_end : document.cookie.length)));
}

例:

<script>
var main_ad_ck=getcookie("main_ad");
if(main_ad_ck!=''){
	.......
}else{
	setcookie("main_ad",'main_ad_once',86400000);//86400000毫秒,24小时
	......
}
</script>

这才是我想要的爱情

无论这辈子是不是足够幸运去拥有,我都愿意最虔诚地去期许。

第一次见到你,你告诉我你叫艾利。

 

后来你说你想去天堂瀑布

可不知道怎么去

你让我用飞船带你去

我发誓带你去,不反悔

后来我们结婚了

我们一起修葺房子、整理房间

这是我们经常坐的位置

我们一起做邮箱、印了个手印

你也印了一个,其实挺好的

我们喜欢一起躺着看天空

你会陪着我去卖气球

我们一起静静的看书,握着你的手,我感觉这就是天堂

天上的云真的好像婴儿,你说你想要很多孩子

我们开始做婴儿室

然而事与愿违

其实真的没关系,只要有你就够了,还有我们的理想

我们开始为了我们的理想存钱,可生活中总是有很多事

每次我们一起出门,你总是帮我打领带

就这样,直到我们都老了

但我们越来越相爱了

你还是会陪我一起去卖气球。真的很快乐

我们还是会跳舞

一起打扫卫生

可岁月总是不饶人的,记得以前爬山坡总是你走在前面

可现在你的步履越来越蹒跚

你摔倒了

我真的很担心

你生病了

我真的好害怕,就这样失去你

最终你还是先我而去

后来我踏上了寻找之旅

去实现你和我的梦想

我开始了一场华丽的冒险

最终我把我们的家带到了天堂瀑布!

I miss you
Ellie,I love you
forever

玩转WP Cumulus

引用地址:http://www.wangzecheng.com/2010/06/17/88.html

HI~
首先来简单认识一下 WP Cumulus 插件,这一款插件是一款超酷的3D立体效果的标签云插件!
在安装启用后可以将 WordPress 里的标签云模块打造成超酷的3D立体效果,所有的标签在一个 3D 空间内不断的旋转, 给用户强大的视觉冲击力。

WP Cumulus 插件的主要特点:

云图可以包含标签或者分类, 当然您也可以让两者都有。
支持 Widget 和自定义模板代码。
最重要的一点是它超酷的效果背后并不影响搜索引擎的抓取,它所生成的标签云只是在视觉效果上以3D Flash来呈现, 但得到的源代码和 WordPress 默认的标签云是一样的,这也是最让人喜欢的一点吧。
WP Cumulus 插件的使用方法

上传插件, 激活, 然后在 Setting 里面可以找到 WP Cumulus 的相关设置选项。其中有:

基本设置: 包括Flash标签云的高度, 宽度, 背景颜色, 字体颜色, 是否使用透明模式, 回转速度等。(注:不建议您设置它的高度,因为默认情况下它会自动适应)
输出设置: 选择要显示分类, 标签还是两者皆有。
高级设置: 使用 wp_tag_cloud 的参数设置, 可设置包括标签云的显示数量, 最大字体和最小字体等。
当然,您也可以在任何一个页面通过函数调用:

同样可以实现这种效果。

需要进一步说明的是 “wp_tag_cloud parameters” 这个选项,这是 wp_tag_cloud 参数设置项:(以下为使用范例)

“number=” 为标签数量属性控制,例如:”number=50″ 表示限制只输出前50个标签;
“smallest= & largest=” 为标签字体大小属性控制,例如:”smallest=10 & largest=25″ 表示最热门的标签字体大小为25px,最冷门的为10px。
注意:此选项不支持设置 ‘units’, ‘orderby’, ‘order’ 等参数。

好了,总结下使用WP Cumulus 过程中我遇到的问题,

一是最新版号称支持中文标签,但是使用过程中发现无法正常使用中文标签!

二我自己多方查阅资料,自己按照网上的教程自己弄了一个中文版的WP Cumulus 可是字体却惨不忍睹,不好看,不过在这里我愿意把自己做的中文版的WP Cumulus分享给大家

三那个wp_tag_cloud parameters设置比较复杂,我倒腾了半天没成功,有会的情留言告诉我,不胜感激!这个插件我保留几天,或许过两天我会停用!祝大家好运!

猛击我下载WP Cumulus中文版

兼容IE,FF,OP的添加收藏夹(兼容热点)

<script type="text/javascript">
var address = function (obj, url, title) {
    var e = window.event || arguments.callee.caller.arguments[0];
 
    var B = {
        IE : /MSIE/.test(window.navigator.userAgent) && !window.opera
        , FF : /Firefox/.test(window.navigator.userAgent)
        , OP : !!window.opera
    };
 
    obj.onmousedown = null;
 
    if (B.IE) {
        obj.attachEvent("onmouseup", function () {
            try {
                window.external.AddFavorite(url, title);
                window.event.returnValue = false;
            } catch (exp) {}
        });
    } else {
        if (B.FF || obj.nodeName.toLowerCase() == "a") {
            obj.setAttribute("rel", "sidebar"), obj.title = title, obj.href = url;
        } else if (B.OP) {
            var a = document.createElement("a");
            a.rel = "sidebar", a.title = title, a.href = url;
            obj.parentNode.insertBefore(a, obj);
            a.appendChild(obj);
            a = null;
        }
    }
};
</script>
<img src="http://hi.csdn.net/images/csdnlogo.gif" alt="" width="280" height="60" border="0" usemap="#Map" />
<map name="Map">
<area shape="rect" coords="25,14,258,49" onMouseDown="address(this, 'http://www.never-online.net/', 'BlueDestiny前辈的BLOG')" />
</map>
<a href="javascript:void(0);" onMouseDown="address(this, 'http://www.never-online.net/', 'BlueDestiny前辈的BLOG')">添加</a>

Google Adsense西联汇款收款攻略

什么是西联快汇?

西联快汇是一种付款方式,可让通过西联全球汇款服务接收 AdSense 付款。按照正常的付款计划,付款汇出后的第一天起,您即可在当地的西联代理机构取款。

这表示您无需等待邮寄的支票。选择西联汇款还可以减少存入支票金额所需的银行费用及漫长的托收期。

西联快汇款将以美元支付。不过,在大多数西联代理机构,您也可以选择以当地货币取款。汇率按照取款当日西联代理机构使用的汇率计算。

西联付款采用何种货币和汇率?

西联快汇款以美元支付。不过,在大多数西联代理机构,您也可以要求以当地货币提取付款。建议您致电当地的西联代理机构,确认可支取哪些货币。汇率会根据取款当日西联代理机构采用的汇率而有所变化。

我所在的国家/地区提供西联快汇服务吗?

目前,以下国家和地区提供西联快汇服务:

  • 中国大陆
  • 马来西亚
  • 巴基斯坦
  • 罗马尼亚
  • 菲律宾
  • 阿根廷
  • 智利
  • 秘鲁
  • 哥伦比亚

今后我们可能会向更广大地区的发布商提供西联快汇服务,但目前尚无法确定何时能实现这一目标。在我们扩展此付款方式范围过程中,感谢您的耐心等待!

我可以在何处提取西联付款?

要查找您所在地区的西联代理,请访问 http://www.payment-solutions.com/agent.asp 。请提交地址并从 “Product”(产品) 下拉框中选择 “Quick Cash”(快汇)。您随即会看到距您最近的西联代理机构清单。建议您致电西联代理机构确认他们提供快汇服务。

关于西联快汇手续费及其支持问题:
经咨询,300$以下付款往美国的话最少需要支付8$美元手续费用。(从美国汇往中国也应该相同)
西联快汇是由汇款方支付手续费。但是这不代表手续费用将由Googel承担。正好相反,这些手续费用将由发布者自己承担,直接从发布者的收入里扣除。
货币形式
Google Adsense通过西联支付的是美元收入,所以我们在西联收到的是美元现汇,发布者可以在办理的时候当场取美元现金或换成人民币,也可以在农业银行开设账户以现汇的方式办理存款。提示:换成现金会有汇率损失。
收款通知
西联汇款目前没有收款通知,Google Adsense显示支付状态为”已付款”后第二天发布者可以持有效身份证件和Google Adsense的支付信息到就近的西联汇款网点办理收款。
记住携带的信息:
有效身份证件
汇款人信息:Google Inc. 1600 Amphitheatre Parkway, Mountain View, California 94043, USA. Phone Number: 650-253-4000
汇款数额
你唯一的MTCN汇款密码(西联汇款需要你提供这个密码才能够取钱),这个密码通过你在汇款历史页点击Payment Issued连接取得(不是邮
件)最后注意你可以在35天内收取汇款,过期将会把款项加到你的帐户总额中。

如何启用西联快汇收款:
发布者在我的帐户设置中启用西联快汇方式及可。

西联快汇与标准汇款的区别与选择:
西联快汇的特点就是“快”,即时到帐,安全又快捷,Google汇出的款你稍后就能收到。而不用再等支票的漫长邮寄过程,更不用担心标准汇款那样在途中有什么事情发生。但是需要发布者每月定时主动查询收入汇款并携带相关证件密码到相关代理机构去取钱,以后邮递员再也不会上门来给你支票并通知你去领钱了。所以说,不一定所有的发布者都需要西联快汇。到底用什么方式,每个发布者视自己的情况而定吧。

如何办理西联快汇?你可以通过西联快汇网点查询你的所在地是否开通了西联快汇服务。主页-“ Find Agent Location”点击后,在“ Search for Agent Locations Worldwide ”下面的表格中“City”用汉语拼音敲入你的所在城市(如:shenyang),在“ Country ”处选择“ china ”,点 continue 就可以查到你所在城市的地点,电话话码等,国内主要以农行和邮局为主。在国内免费800电话为:800-820-8668 ,拨打后按1服务小姐接通。目前在亚洲开通西联快汇的国家有:
中国、香港、台湾、日本、韩国、印度、新加坡、巴林、巴基斯坦、巴勒斯坦、孟加拉、越南、文莱、柬埔寨、塞浦路斯、东帝汶、印度尼西亚、以色列、约旦、黎巴嫩、科威特、马尔代夫、马来西亚、蒙古、尼泊尔、泰国、阿曼、菲律宾、沙特阿拉伯、斯里兰卡、卡塔尔、土耳其、阿联酋、也门
取款手续:

收到GOOGLE让你取款的通知后,你就可以到你附近的邮局或农行办理收款。

去之前你需要带的证件及相关收款信息有:

1、本人身份证(不可代收的)

2、汇款监控号-MTCN(谷歌给你的,一般是在Google Adsense后台付款历史上有:×月××日 付款已签发。点击详情后,会看到MTCN —10位数的字串)

3、你的收入,搞准,包括小数点后面的

4、Google公司的地址(后台会提供),一般是这样的:

×××’s information:
Google Inc.
1600 Amphitheatre Parkway
Mountain View, CA 94043
USA

你也可以写中文

姓名:Google Inc.
地址:美国 加利福尼亚州 山景城

5、个人信息

可以写中文,主要是电话、地址等。

mysql 中 时间和日期函数

引用地址:http://www.cnblogs.com/redfox241/archive/2009/07/23/1529092.html

一、MySQL 获得当前日期时间 函数

1.1 获得当前日期+时间(date + time)函数:now()

mysql> select now();

+———————+
| now()               |
+———————+
| 2008-08-08 22:20:46 |
+———————+

除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:

 current_timestamp()
,current_timestamp
,localtime()
,localtime
,localtimestamp    – (v4.0.6)
,localtimestamp()  – (v4.0.6)

这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。

1.2 获得当前日期+时间(date + time)函数:sysdate()

sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。看下面的例子就明白了:

mysql> select now(), sleep(3), now();

+———————+———-+———————+
| now()               | sleep(3) | now()               |
+———————+———-+———————+
| 2008-08-08 22:28:21 |        0 | 2008-08-08 22:28:21 |
+———————+———-+———————+

mysql> select sysdate(), sleep(3), sysdate();

+———————+———-+———————+
| sysdate()           | sleep(3) | sysdate()           |
+———————+———-+———————+
| 2008-08-08 22:28:41 |        0 | 2008-08-08 22:28:44 |
+———————+———-+———————+

可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3 秒。MySQL Manual 中是这样描述 sysdate() 的:Return the time at which the function executes。

sysdate() 日期时间函数,一般情况下很少用到。

2. 获得当前日期(date)函数:curdate()

mysql> select curdate();

+————+
| curdate()  |
+————+
| 2008-08-08 |
+————+

其中,下面的两个日期函数等同于 curdate():

 current_date()
,current_date

3. 获得当前时间(time)函数:curtime()

mysql> select curtime();

+———–+
| curtime() |
+———–+
| 22:41:30  |
+———–+

其中,下面的两个时间函数等同于 curtime():

 current_time()
,current_time

4. 获得当前 UTC 日期时间函数:utc_date(), utc_time(), utc_timestamp()

mysql> select utc_timestamp(), utc_date(), utc_time(), now()

+———————+————+————+———————+
| utc_timestamp()     | utc_date() | utc_time() | now()               |
+———————+————+————+———————+
| 2008-08-08 14:47:11 | 2008-08-08 | 14:47:11   | 2008-08-08 22:47:11 |
+———————+————+————+———————+

因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
二、MySQL 日期时间 Extract(选取) 函数。

1. 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒

set @dt = ’2008-09-10 07:15:30.123456′;

select date(@dt);        – 2008-09-10
select time(@dt);        – 07:15:30.123456
select year(@dt);        – 2008
select quarter(@dt);     – 3
select month(@dt);       – 9
select week(@dt);        – 36
select day(@dt);         – 10
select hour(@dt);        – 7
select minute(@dt);      – 15
select second(@dt);      – 30
select microsecond(@dt); – 123456

2. MySQL Extract() 函数,可以上面实现类似的功能:

set @dt = ’2008-09-10 07:15:30.123456′;

select extract(year                from @dt); – 2008
select extract(quarter             from @dt); – 3
select extract(month               from @dt); – 9
select extract(week                from @dt); – 36
select extract(day                 from @dt); – 10
select extract(hour                from @dt); – 7
select extract(minute              from @dt); – 15
select extract(second              from @dt); – 30
select extract(microsecond         from @dt); – 123456

select extract(year_month          from @dt); – 200809
select extract(day_hour            from @dt); – 1007
select extract(day_minute          from @dt); – 100715
select extract(day_second          from @dt); – 10071530
select extract(day_microsecond     from @dt); – 10071530123456
select extract(hour_minute         from @dt); –    715
select extract(hour_second         from @dt); –    71530
select extract(hour_microsecond    from @dt); –    71530123456
select extract(minute_second       from @dt); –      1530
select extract(minute_microsecond  from @dt); –      1530123456
select extract(second_microsecond  from @dt); –        30123456

MySQL Extract() 函数除了没有date(),time() 的功能外,其他功能一应具全。并且还具有选取‘day_microsecond’ 等功能。注意这里不是只选取 day 和 microsecond,而是从日期的 day 部分一直选取到 microsecond 部分。够强悍的吧!

MySQL Extract() 函数唯一不好的地方在于:你需要多敲几次键盘。

3. MySQL dayof… 函数:dayofweek(), dayofmonth(), dayofyear()

分别返回日期参数,在一周、一月、一年中的位置。

set @dt = ’2008-08-08′;

select dayofweek(@dt);   – 6
select dayofmonth(@dt);  – 8
select dayofyear(@dt);   – 221

日期 ‘2008-08-08′ 是一周中的第 6 天(1 = Sunday, 2 = Monday, …, 7 = Saturday);一月中的第 8 天;一年中的第 221 天。

4. MySQL week… 函数:week(), weekofyear(), dayofweek(), weekday(), yearweek()

set @dt = ’2008-08-08′;

select week(@dt);        – 31
select week(@dt,3);      – 32
select weekofyear(@dt);  – 32

select dayofweek(@dt);   – 6
select weekday(@dt);     – 4

select yearweek(@dt);    – 200831

MySQL week() 函数,可以有两个参数,具体可看手册。 weekofyear() 和 week() 一样,都是计算“某天”是位于一年中的第几周。 weekofyear(@dt) 等价于 week(@dt,3)。

MySQL weekday() 函数和 dayofweek() 类似,都是返回“某天”在一周中的位置。不同点在于参考的标准, weekday:(0 = Monday, 1 = Tuesday, …, 6 = Sunday); dayofweek:(1 = Sunday, 2 = Monday, …, 7 = Saturday)

MySQL yearweek() 函数,返回 year(2008) + week 位置(31)。

5. MySQL 返回星期和月份名称函数:dayname(), monthname()

set @dt = ’2008-08-08′;

select dayname(@dt);     – Friday
select monthname(@dt);   – August

思考,如何返回中文的名称呢?

6. MySQL last_day() 函数:返回月份中的最后一天。

select last_day(’2008-02-01′);  – 2008-02-29
select last_day(’2008-08-08′);  – 2008-08-31

MySQL last_day() 函数非常有用,比如我想得到当前月份中有多少天,可以这样来计算:

mysql> select now(), day(last_day(now())) as days;

+———————+——+
| now()               | days |
+———————+——+
| 2008-08-09 11:45:45 |   31 |
+———————+——+

三、MySQL 日期时间计算函数

1. MySQL 为日期增加一个时间间隔:date_add()

set @dt = now();

select date_add(@dt, interval 1 day);        – add 1 day
select date_add(@dt, interval 1 hour);       – add 1 hour
select date_add(@dt, interval 1 minute);     – 
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);

select date_add(@dt, interval -1 day);       – sub 1 day

MySQL adddate(), addtime()函数,可以用 date_add() 来替代。下面是 date_add() 实现 addtime() 功能示例:

mysql> set @dt = ’2008-08-09 12:12:33′;

mysql>
mysql> select date_add(@dt, interval ’01:15:30′ hour_second);

+————————————————+
| date_add(@dt, interval ’01:15:30′ hour_second) |
+————————————————+
| 2008-08-09 13:28:03                            |
+————————————————+

mysql> select date_add(@dt, interval ’1 01:15:30′ day_second);

+————————————————-+
| date_add(@dt, interval ’1 01:15:30′ day_second) |
+————————————————-+
| 2008-08-10 13:28:03                             |
+————————————————-+

date_add() 函数,分别为 @dt 增加了“1小时 15分 30秒” 和 “1天 1小时 15分 30秒”。建议:总是使用 date_add() 日期时间函数来替代 adddate(), addtime()。

2. MySQL 为日期减去一个时间间隔:date_sub()

mysql> select date_sub(’1998-01-01 00:00:00′, interval ’1 1:1:1′ day_second);

+—————————————————————-+
| date_sub(’1998-01-01 00:00:00′, interval ’1 1:1:1′ day_second) |
+—————————————————————-+
| 1997-12-30 22:58:59                                            |
+—————————————————————-+

MySQL date_sub() 日期时间函数 和 date_add() 用法一致,不再赘述。另外,MySQL 中还有两个函数 subdate(), subtime(),建议,用 date_sub() 来替代。

3. MySQL 另类日期函数:period_add(P,N), period_diff(P1,P2)

函数参数“P” 的格式为“YYYYMM” 或者 “YYMM”,第二个参数“N” 表示增加或减去 N month(月)。

MySQL period_add(P,N):日期加/减去N月。

mysql> select period_add(200808,2), period_add(20080808,-2)

+———————-+————————-+
| period_add(200808,2) | period_add(20080808,-2) |
+———————-+————————-+
|               200810 |                20080806 |
+———————-+————————-+

MySQL period_diff(P1,P2):日期 P1-P2,返回 N 个月。

mysql> select period_diff(200808, 200801);

+—————————–+
| period_diff(200808, 200801) |
+—————————–+
|                           7 |
+—————————–+

在 MySQL 中,这两个日期函数,一般情况下很少用到。

4. MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)

MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。

select datediff(’2008-08-08′, ’2008-08-01′);  – 7
select datediff(’2008-08-01′, ’2008-08-08′);  – -7

MySQL timediff(time1,time2):两个日期相减 time1 - time2,返回 time 差值。

select timediff(’2008-08-08 08:08:08′, ’2008-08-08 00:00:00′); – 08:08:08
select timediff(’08:08:08′, ’00:00:00′);                       – 08:08:08

注意:timediff(time1,time2) 函数的两个参数类型必须相同。
四、MySQL 日期转换函数、时间转换函数

1. MySQL (时间、秒)转换函数:time_to_sec(time), sec_to_time(seconds)

select time_to_sec(’01:00:05′);  – 3605
select sec_to_time(3605);        – ’01:00:05′

2. MySQL (日期、天数)转换函数:to_days(date), from_days(days)

select to_days(’0000-00-00′);  – 0
select to_days(’2008-08-08′);  – 733627

select from_days(0);           – ’0000-00-00′
select from_days(733627);      – ’2008-08-08′

3. MySQL Str to Date (字符串转换为日期)函数:str_to_date(str, format)

select str_to_date(’08/09/2008′, ’%m/%d/%Y’);                   – 2008-08-09
select str_to_date(’08/09/08′  , ’%m/%d/%y’);                   – 2008-08-09
select str_to_date(’08.09.2008′, ’%m.%d.%Y’);                   – 2008-08-09
select str_to_date(’08:09:30′, ’%h:%i:%s’);                     – 08:09:30
select str_to_date(’08.09.2008 08:09:30′, ’%m.%d.%Y %h:%i:%s’); – 2008-08-09 08:09:30

可以看到,str_to_date(str,format) 转换函数,可以把一些杂乱无章的字符串转换为日期格式。另外,它也可以转换为时间。“format” 可以参看 MySQL 手册。

4. MySQL Date/Time to Str(日期/时间转换为字符串)函数:date_format(date,format), time_format(time,format)

mysql> select date_format(’2008-08-08 22:23:00′, ’%W %M %Y’);

+————————————————+
| date_format(’2008-08-08 22:23:00′, ’%W %M %Y’) |
+————————————————+
| Friday August 2008                             |
+————————————————+

mysql> select date_format(’2008-08-08 22:23:01′, ’%Y%m%d%H%i%s’);

+—————————————————-+
| date_format(’2008-08-08 22:23:01′, ’%Y%m%d%H%i%s’) |
+—————————————————-+
| 20080808222301                                     |
+—————————————————-+

mysql> select time_format(’22:23:01′, ’%H.%i.%s’);

+————————————-+
| time_format(’22:23:01′, ’%H.%i.%s’) |
+————————————-+
| 22.23.01                            |
+————————————-+

MySQL 日期、时间转换函数:date_format(date,format), time_format(time,format) 能够把一个日期/时间转换成各种各样的字符串格式。它是 str_to_date(str,format) 函数的 一个逆转换。

5. MySQL 获得国家地区时间格式函数:get_format()

MySQL get_format() 语法:

get_format(date|time|datetime, ’eur’|'usa’|'jis’|'iso’|'internal’

MySQL get_format() 用法的全部示例:

select get_format(date,’usa’)          ;   – ’%m.%d.%Y’
select get_format(date,’jis’)          ;   – ’%Y-%m-%d’
select get_format(date,’iso’)          ;   – ’%Y-%m-%d’
select get_format(date,’eur’)          ;   – ’%d.%m.%Y’
select get_format(date,’internal’)     ;   – ’%Y%m%d’
select get_format(datetime,’usa’)      ;   – ’%Y-%m-%d %H.%i.%s’
select get_format(datetime,’jis’)      ;   – ’%Y-%m-%d %H:%i:%s’
select get_format(datetime,’iso’)      ;   – ’%Y-%m-%d %H:%i:%s’
select get_format(datetime,’eur’)      ;   – ’%Y-%m-%d %H.%i.%s’
select get_format(datetime,’internal’) ;   – ’%Y%m%d%H%i%s’
select get_format(time,’usa’)          ;   – ’%h:%i:%s %p’
select get_format(time,’jis’)          ;   – ’%H:%i:%s’
select get_format(time,’iso’)          ;   – ’%H:%i:%s’
select get_format(time,’eur’)          ;   – ’%H.%i.%s’
select get_format(time,’internal’)     ;   – ’%H%i%s’

MySQL get_format() 函数在实际中用到机会的比较少。

6. MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)

select makedate(2001,31);   – ’2001-01-31′
select makedate(2001,32);   – ’2001-02-01′

select maketime(12,15,30);  – ’12:15:30′

五、MySQL 时间戳(Timestamp)函数

1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()

mysql> select current_timestamp, current_timestamp();

+———————+———————+
| current_timestamp   | current_timestamp() |
+———————+———————+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+———————+———————+

2. MySQL (Unix 时间戳、日期)转换函数:

unix_timestamp(),
unix_timestamp(date),
from_unixtime(unix_timestamp),
from_unixtime(unix_timestamp,format)

下面是示例:

select unix_timestamp();                       – 1218290027
select unix_timestamp(’2008-08-08′);           – 1218124800
select unix_timestamp(’2008-08-08 12:30:00′);  – 1218169800

select from_unixtime(1218290027);              – ’2008-08-09 21:53:47′
select from_unixtime(1218124800);              – ’2008-08-08 00:00:00′
select from_unixtime(1218169800);              – ’2008-08-08 12:30:00′

select from_unixtime(1218169800, ’%Y %D %M %h:%i:%s %x’); – ’2008 8th August 12:30:00 2008′

3. MySQL 时间戳(timestamp)转换、增、减函数:

timestamp(date)                                     – date to timestamp
timestamp(dt,time)                                  – dt + time
timestampadd(unit,interval,datetime_expr)           –
timestampdiff(unit,datetime_expr1,datetime_expr2)   –

请看示例部分:

select timestamp(’2008-08-08′);                         – 2008-08-08 00:00:00
select timestamp(’2008-08-08 08:00:00′, ’01:01:01′);    – 2008-08-08 09:01:01
select timestamp(’2008-08-08 08:00:00′, ’10 01:01:01′); – 2008-08-18 09:01:01

select timestampadd(day, 1, ’2008-08-08 08:00:00′);     – 2008-08-09 08:00:00
select date_add(’2008-08-08 08:00:00′, interval 1 day); – 2008-08-09 08:00:00

MySQL timestampadd() 函数类似于 date_add()。

select timestampdiff(year,’2002-05-01′,’2001-01-01′);                    – -1
select timestampdiff(day ,’2002-05-01′,’2001-01-01′);                    – -485
select timestampdiff(hour,’2008-08-08 12:00:00′,’2008-08-08 00:00:00′);  – -12

select datediff(’2008-08-08 12:00:00′, ’2008-08-01 00:00:00′);           – 7

MySQL timestampdiff() 函数就比 datediff() 功能强多了,datediff() 只能计算两个日期(date)之间相差的天数。
六、MySQL 时区(timezone)转换函数

convert_tz(dt,from_tz,to_tz)

select convert_tz(’2008-08-08 12:00:00′, ’+08:00′, ’+00:00′); – 2008-08-08 04:00:00

时区转换也可以通过 date_add, date_sub, timestampadd 来实现。

select date_add(’2008-08-08 12:00:00′, interval -8 hour);  – 2008-08-08 04:00:00
select date_sub(’2008-08-08 12:00:00′, interval  8 hour);  – 2008-08-08 04:00:00
select timestampadd(hour, -8, ’2008-08-08 12:00:00′);      – 2008-08-08 04:00:00

js简繁体切换代码&javascript在IE和Firefo x中兼容性问题

页面简繁体切换问题,花了两天终于搞定。

网上有两个版本的js代码

1.最常见的那个js文件在ff下面会有问题,原因是ff对childNode属性的支持有问题。版本一:js文件下载

页面代码:<a href=”#nogo” id=”StranLink”>简体</a>

2.还有一个不容易找到的版本,兼容性比较好,推荐。版本二:js文件下载

页面代码:<a id=”st” href=”javascript:st();void 0;” style=”cursor:pointer”>简体中文</a>

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

附:《javascript在IE和Firefo x中兼容性问题》

-、元素查找问题

1. document.all[name]

  (1)现有问题:Firefox不支持document.all[name]

  (2)解决方法:使用getElementsByName(name),getElementById(id)等来替代。

  (3) 在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。

2. 集合类对象问题

  (1)现有问题:IE中对许多集合类对象取用时可以用 (),但在Firefox只能用[]。

      如:IE中可以使用document.forms(“formName”)来返回名字为”formName”的Form,但在Firefox却行不通。

   (2)解决方法:使用[],上例中可以改为document.forms["formName"]

3. HTML元素的ID在JavaScript可见

  (1)现有问题:IE中HTML元素中的ID可以作为document的下属对象变量名直接使用。在Firefox中不能。

  (2)解决方法:使用getElementById(“idName”)代替idName作为对象变量使用。

4. eval(idName)取得对象

  (1)现有问题:在IE中,利用eval(idName)可以取得ID为idName的HTML对象,在Firefox中不能。

  (2)解决方法:用 getElementById(idName) 代替 eval(idName)。

5. 变量名与某HTML对象ID相同

  (1)现有问题:在Firefox中,因为对象ID不作为HTML对象的名称,所以可以使用与HTML对象id相同的变量名,IE中不能。

  (2)解决方法:在声明变量时,一律加上var,以避免歧义,这样在IE中亦可正常运行。此外,最好不要取与HTML对象id相同的变量名,以减少错误。

 注:3、4和5都属于同一类的问题。

6. Frame

  (1)现有问题:在IE中可以用window.top.frameId和window.top.frameName来得到该Frame所代表的Window,Firefox中只能用window.top.frameName。

  (2)解决方法:将Frame的Id和Name设置成相同,使用window.top.frameName来访问Frame。

      另外,在mf和ie中都可以使用window.top.document.getElementById(“frameId”)来访问frame标签

并且可以通过window.top.document.getElementById(“testFrame”).src = ‘xx.htm’来切换frame的内容

也都可以通过window.top.frameName.location = ‘xx.htm’来切换frame的内容。

二、DOM操作

1. 设置元素的文本内容。

  (1)现有问题:IE使用innerText,而Firefox使用textContent来设置元素文本内容。

  (2)解决方法:如果文本内容不包含”<”和”>”等特殊字符,可以使用innerHTML。否则,可以使用:

        var child = elem.firstChild;

            if (child != null) elem.removeChild(child);

            elem.appendChild(document.createTextNode(content));

2. parentElement,parent.children

  (1)现有问题:IE可以使用parentElement获得父结点,parent.children得到结点的所有孩子结点。Firefox不支持。

  (2)解决方法:使用parentNode和parent.childNodes。

3. 对childNodes的解释。

  (1)现有问题:IE和Firefox中对childNodes的解释不同,IE不会包含空白文本结点,而Firefox会包含。

  (2)解决方法:使用childNodes过滤文本结点,如下:

      var children = elem.childNodes;

          for (i = 0; i < children.length; i++) {

            if (children[i].nodeType != 3) { // 过滤文本结点

              // …

            }

          }

4. 对document.getElementsByName的解释。

  (1)现有问题:IE中getElementsByName只会检查<input>和<img>元素,而在Firefox下会检查所有元素。

  (2)解决方法:不要使用getElementsByName检查除<input>和<img>之外的元素,如果要获得单个元素,尽量使用getElementById。如果是别的元素用getElementById也可以获得元素数组。

5. 对document.getElementById的解释。

  (1)现有问题:IE中getElementById不仅检查Id属性,也会检查Name属性,当Name属性匹配参数时也会返回该元素。而在Firefox中只会检查Id属性。

  (2)解决方法:尽量保持Id和Name相同,不要让一个元素name属性和另一个元素的id属性相同。

三、事件

1. event.x与event.y问题

  (1)现有问题:在IE中,event对象有x,y 属性,Firefox中没有。

  (2)解决方法:在Firefox中,与event.x 等效的是 event.pageX。可以使用:

      mX = event.x ? event.x : event.pageX;

  (3) event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。

2. window.event

  (1)现有问题:使用window.event无法在Firefox上运行

  (2)解决方法:原代码(可在IE中运行):

 <input type=”button” name=”someButton” value=”提交” onclick=”javascript:gotoSubmit()”/>

<script language=”javascript”>

function gotoSubmit() {

alert(window.event);    // use window.event

}

 </script>

 新代码(可在IE和Firefox中运行):

<input type=”button” name=”someButton” value=”提交” onclick=”javascript:gotoSubmit(event)”/>

<script language=”javascript”>

 function gotoSubmit(evt) {

 evt = evt ? evt : (window.event ? window.event : null);

  alert(evt);             // use evt

 }

 </script>

3. attachEvent和addEventListener

  (1)现有问题:IE中使用attachEvent来添加事件,Firefox中使用addEventListener。

  (2)解决方法:如下,注意事件参数的区别,一个是click,一个是onclick。

        if (document.attachEvent) document.attachEvent(“click”, clickHandler,false);

        else document.addEventListener(“onclick”,clickHandler);

四、语法

1. const

  (1)现有问题:在IE中不能使用const关键字。如const constVar = 32;在IE中这是语法错误。

  (2)解决方法:不使用const,以var代替。

2. 多余的逗号

  (1)现有问题:firefox中对象文字常量容许多余的逗号,在IE中不允许。下面语句在IE中非法。

      var obj = { ‘key’ : ‘aaa’, }

  (2)解决方法:去掉多余逗号。

五、XML

1. 创建XMLHttpRequest

  (1)现有问题:Firefox使用XMLHttpRequest,IE使用ActiveXObject。

  (2)解决方法:

      if (window.XMLHttpRequest) {

          req = new XMLHttpRequest();

      } else if (window.ActiveXObject) {

          req = new ActiveXObject(“Microsoft.XMLHTTP”);

      }

2. 创建DOM

  (1)现有问题:Firefox和IE创建DOM的方式不同。

  (2)解决方法:

        function createXmlDom() {

          var oXmlDom;

          if (Window.ActiveXObject) { // IE

            oXmlDom = new ActiveXObject(“Microsoft.XmlDom”);

          } else {  // Firefox

            oXmlDom = document.implementation.createDocument(“”, “”, null);

          }

        }

3. 加载XML

  (1)现有问题:如果要加载外部文件IE和Firefox都可以用:

          oXmlDom.async=false;      // 这在Firefox中是必须的

          oXmlDom.load(“test.xml”);

     但是它们加载xml字符串的方式不一样,IE中直接可以使用oXmlDom.loadXML(“<root><child/></root>”),而Firefox要使用DOMParser:

        var oParser = new DOMParser();

          var oXmlDom = oParser.parseFromString(“<root/>”, “text/xml”);

  (2)解决方法:比较好的方法是给Firefox产生的XMLDom加上loadXML方法:

        if (isFirefox) { // 需要浏览器检测

          Document.prototype.loadXML = function(sXml) {

            var oParser = new DOMParser();

            var oXmlDom = oParser.parseFromString(sXml, “text/xml”);

            while (this.firstChild) this.removeChild(this.firstChild);

            for (var i = 0; i < oXmlDom.childNodes.length; i++) {

              var oNewNode = this.importNode(oXmlDom.childNodes[i], true);

              this.appendChild(oNewNode);

            }

          }

        }

      这样在IE和Firefox就可以调用loadXML方法了。

4. XPath支持

  (1)现有问题:IE中可以直接用XmlDOM的selectNodes来根据XPath表示式来选择结点,Firefox则比较复杂,需要使用XPathEvaluator。

     IE:

        var lstNodes = oXmlDom.documentElement.selectNodes(“employee/name”);

        for (var i = 0; i < lstNodes.length; i++) {

          alert(lstNodes[i].firstChild.nodeValue);

        }

     Firefox:

          var oEvaluator = new XPathEvaluator();

          var oResult = oEvaluator.evaluate(“employee/name”, oXmlDom.documentElement, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

          var oElement = oResult.iterateNext();

          while (oElement) {

            alert(oElement.firstChild.nodeValue);

            oElement = oResult.iterateNext();

          }

  (2)解决方法:比较好的方法给Firefox的Element添加selectNodes方法。

        if (isFirefox) { // 需要浏览器检测

            Element.prototype.selectNodes = function(sXPath) {

            var oEvaluator = new XPathEvaluator();

              var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

              var aNodes = new Array();

              if (oResult != null) {

                var oElement = oResult.iterateNext();

                while (oElement) {

                  aNodes.push(oElement);

                  oElement = oResult.iterateNext();

                }

              }

              return aNodes;

           }

      }

   这样在IE和Firefox中就都可以调用selectNodes方法了。

5. XSLT支持

  (1)现有问题:IE中可以使用XmlDOM的transferNode方法将其转换成html,而Firefox需要使用XSLTProcessor。

  IE:

        oXmlDom.load(“employee.xml”);

        oXslDom.load(“employee.xslt”);

        var sResult=oXmlDom.transformNode(oXslDom);

    Firefox:

        var oProcessor = new XSLTProcessor();

        oProcessor.importStylesheet(oXslDom);

        var oResultDom = oProcessor.transformToDocument(oXmlDom);       

        var oSerializer = new XMLSerializer();

        var sXml = oSerializer.serializeToString(oResultDom, “text/xml”);

        alert(sXml);

  (2)解决方法:比较好的方法给Firefox的Node添加transferNode方法。

        if (isFirefox) { // 需要浏览器检测

          Node.prototype.transformNode = function(oXslDom) {

          var oProcessor = new XSLTProcessor();

            oProcessor.importStylesheet(oXslDom);

            var oResultDom = oProcessor.transformToDocument(oXmlDom);

            var oSerializer = new XMLSerializer();

            var sXml = oSerializer.serializeToString(oResultDom, “text/xml”);

            return sXml;

          }

        }

   这样在IE和Firefox中就都可以调用transferNode方法了。

6. 在Firefox中,自己定义的属性必须getAttribute()取得

7.在Firefox中没有  parentElement parement.children  而用

               parentNode parentNode.childNodes

   childNodes的下标的含义在IE和MF中不同,Firefox使用DOM规范,childNodes中会插入空白文本节点。

  一般可以通过node.getElementsByTagName()来回避这个问题。

   当html中节点缺失时,IE和Firefox对parentNode的解释不同,例如

   <form>

   <table>

        <input/>

   </table>

   </form>

   Firefox中input.parentNode的值为form, 而IE中input.parentNode的值为空节点

 Firefox中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

8. body 对象

   Firefox的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在

9. url encoding

在js中如果书写url就直接写&不要写&amp;例如var url = ‘xx.jsp?objectName=xx&amp;objectEvent=xxx’;

frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器

一般会服务器报错参数没有找到

当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&amp;

一般Firefox无法识别js中的&amp;

10. nodeName 和 tagName 问题

  (1)现有问题:

     在Firefox中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象

     有问题(具体情况没有测试,但我的IE已经死了好几次)。

  (2)解决方法:

     使用 tagName,但应检测其是否为空。

11. 元素属性

   IE下 input.type属性为只读,但是Firefox下可以修改