预览模式: 普通 | 列表

两个php.ini配置相关问题

错误:Notice: Undefined index: page

error_reporting = E_ALL; display all errors, warnings and notices
改成
error_reporting = E_ERROR & ~E_NOTICE & ~E_WARNING

错误:不支持<? ?>这样的短标记

short_open_tag开启即可

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2382

php数学函数

  • integer(整型)

integer 为整数型别。在 32 位的操作系统中,它的有效范围是 -2,147,483,648 到 +2,147,483,647 (2^31+符号位)。要使用 16 进位整数可以在面加 0x。 整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +)。
十进制:如果看到15时,它表示(1*10+5)或1510
包含(0...9)十个数字
八进制:如果看到15时,它表示(1*8+5)或158 或 1310
包含(0...7)八个数字
十六进制:如果看到15时,它表示(1*16+5)或1516 或 2110
包含(0...9,A,B,C,D,E,F)十六个数字

如果用八进制符号,数字前必须加上 0(零),用十六进制符号数字前必须加上 0x。
<?php
$a = 1234; // 十进制数
$a = -123; // 一个负数
$a = 0123; // 八进制数(等于十进制的 83)
$a = 0x1A; // 十六进制数(等于十进制的 26)
?>

  • float(也叫浮点数,双精度数或实数)

浮点数为浮点数型别。在 32 位的操作系统中,它的有效范围是 1.7E-308 到 1.7E+308。(自然底数e=2.71828183)
<?php
$a = 1.234;
$a = 1.2e3;
$a = 7E-10;
?>

<?php
$foo = 10;   // $foo is an integer
$bar = (bool) $foo;   // $bar is a boolean
?>

允许的强制转换有:

  • (int),(integer) - 转换成整型 无四舍五入
  • (bool),(boolean) - 转换成布尔型 不为0的正数或负数都为true
  • (float),(double),(real) - 转换成浮点型
  • (string) - 转换成字符串

数学运算函数库
Abs
取得绝对值。
语法: mixed abs(mixed number);
返回值: 混合类型资料
函数种类: 数学运算

内容说明

返回参数 number 的绝对值。若 number 是倍精确浮点数,则返回值也是倍浮点数;其它的类型则返回类型为整数。

Acos
取得反余弦值。
语法: float acos(float arg);
返回值: 浮点数
函数种类: 数学运算

内容说明

返回参数 arg 的反余弦值 (arc cosine)。

Asin
取得反正弦值。
语法: float asin(float arg);
返回值: 浮点数
函数种类: 数学运算

内容说明

返回参数 arg 的反正弦值 (arc sine)。

Atan
取得反正切值。
语法: float atan(float arg);
返回值: 浮点数
函数种类: 数学运算

内容说明

返回参数 arg 的反正切值 (arc tangent)。

Atan2
计算二数的反正切值。 语法: float atan2(float y, float x); 返回值: 浮点数 函数种类: 数学运算

内容说明

本函数用来计算二数 y、x 的反正切值,计算结果与 atan() 计算 y/x 类似,但本函数会因 x、y 的正负号影响结果。而本函数的返回值必落在正负的圆周率间 (-PI <= (值) &lg;= PI)

BinDec
二进位转成十进位。
语法: int bindec(string binary_string);
返回值: 整数
函数种类: 数学运算

内容说明

本函数将二进位数字字符串转成十进位的整数。由于 PHP 使用 32 位有正负号整数计算,能处理的最大十进位数字为 2147483647,也就是二进位数字的 1111111111111111111111111111111 (31 个 1)。

Ceil
计算大于指定数的最小整数。
语法: int ceil(float number);
返回值: 整数
函数种类: 数学运算

内容说明

本函数用来计算比浮点参数 number 大的最小整数。

使用范例

本例返回值为 4。

<?php
$nextint=ceil(3.14);
echo $nextint;
?>

Cos
余弦计算。
语法: float cos(float arg);
返回值: 浮点数
函数种类: 数学运算

内容说明

本函数计算参数 arg 的余弦值 (cosine)。

DecBin
十进位转二进位。
语法: string decbin(int number);
返回值: 字符串
函数种类: 数学运算

内容说明

本函数将十进位数字转成二进位字符串。由于 PHP 使用 32 位有正负号整数计算,能处理的最大十进位数字为 2147483647,也就是二进位数字的 1111111111111111111111111111111 (31 个 1)。

Exp
自然对数 e 的次方值。
语法: float exp(float arg);
返回值: 浮点数
函数种类: 数学运算

内容说明

本函数计算自然对数 (natural logarithm) 的 arg 次方值。

Floor
计算小于指定数的最大整数。
语法: int floor(float number);
返回值: 整数
函数种类: 数学运算

内容说明

本函数用来计算比浮点参数 number 小的最大整数。

使用范例

本例返回值为 3。

<?php
$lastint=floor(3.14);
echo $lastint;
?>

max
取得最大值。
语法: mixed max(mixed arg1, mixed arg2 .... mixed argn);
返回值: 混合类型资料
函数种类: 数学运算

内容说明

本函数计算参数间的最大值。若第一个参数是数字数组,则会找出该数组的最大数字。若第一个参数非数组,则需二个以上的参数。这些数字可以是整数、倍精确数或数字字符串的类型。参数的数目不限,视用户的需求而定。在计算时,只要有一个参数是倍精确数,本函数会将所有的参数都转成倍精确数,并返回倍精确数。若参数只有整数及数字字符串,则会将所有的参数转换成整数,并返回整数。

min
取得最小值。
语法: mixed min(mixed arg1, mixed arg2 .... mixed argn);
返回值: 混合类型资料
函数种类: 数学运算

内容说明

本函数计算参数间的最小值。若第一个参数是数字数组,则会找出该数组的最小数字。若第一个参数非数组,则需二个以上的参数。这些数字可以是整数、倍精确数或数字字符串的类型。参数的数目不限,视用户的需求而定。在计算时,只要有一个参数是倍精确数,本函数会将所有的参数都转成倍精确数,并返回倍精确数。若参数只有整数及数字字符串,则会将所有的参数转换成整数,并返回整数。

number_format
格式化数字字符串。
语法: string number_format(float number, int [decimals], string [dec_point], string [thousands_sep]);
返回值: 字符串
函数种类: 数学运算

内容说明

本函数用来将浮点参数 number 格式化。若没加参数 decimals 则返回的字符串只要整数部份,加了此参数才依参数指定的小数点位数返回。参数 dec_point 表示小数点的表示方式方法,默认值是 ".",若需要转换成其它的小数点就可以在这个参数改掉。参数 thousands_sep 为整数部份每三位的分隔符号,默认值是 ","。本函数最特别的地方就是参数数目,最少要有一个,也就是欲格式化的字符串;也可以有二个或者四个参数,但不能用三个参数。治募注意的是指定小数点的位数之后的数字直接舍弃,没有四舍五入的情形。

使用范例

<?
$short_pi = "3.14159";
$my_pi = number_format($short_pi, 2);
echo $my_pi."\n";   // 3.14
$foo = 850017.9021;
$new_foo = number_format($foo, 3, ".", " ");
echo $new_foo."\n";  // 850 017.902
?>

pi
圆周率。
语法: double pi(void);
返回值: 倍精确数
函数种类: 数学运算

内容说明

本函数返回圆周率。不需输入参数。

pow
次方。
语法: float pow(float base, float exp);
返回值: 浮点数
函数种类: 数学运算

内容说明

本函数计算次方值。参数 base 为基底,exp 为幂数。

使用范例

<?php
print(pow(2,3));  // 8
print(pow(5,4));  // 625
?>

rand
取得随机数值。
语法: int rand([int min], [int max]);
返回值: 整数
函数种类: 数学运算

内容说明

本函数用来取得随机数值。若没有指定随机数的最大及最小范围,本函数会自动的从 0 到 RAND_MAX 中取一个随机数。若有指定 min 及 max 的参数,则从指定参数中取一个数字。例如 rand(38, 49) 则会从 38 到 49 之间取一个随机数值,UNIX 系统包含 49、Win32 系统不包含 49 (zkimmel@earthlink.net 10-May-1999)。值得注意的是为使随机数的乱度最大,每次在取随机数之前最好使用 srand() 以配置新的随机数种子。

round
四舍五入。
语法: double round(double val);
返回值: 倍精确数
函数种类: 数学运算

内容说明

本函数用来将数字小数点后四舍五入。

使用范例

<?php
$foo1 = round(3.4);
$foo2 = round(3.5);
$foo3 = round(3.6);
echo "round(3.4): ".$foo1."<br>\n";
echo "round(3.5): ".$foo2."<br>\n";
echo "round(3.6): ".$foo3;
?>

Sin
正弦计算。
语法: float sin(float arg);
返回值: 浮点数
函数种类: 数学运算

内容说明

本函数计算参数 arg 的正弦值 (sine)。

Sqrt
开平方根。
语法: float sqrt(float arg);
返回值: 浮点数
函数种类: 数学运算

内容说明

本函数将参数 arg 开平方根。

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2806

PHP 中cookie 和 session 的分析

1. PHP 的COOKIE

    cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。
    PHP 在http 协议的头信息里发送cookie,因此  setcookie()     函数必须在其它信息被输出到浏览器
前调用,这和对  header()    函数的限制类似。

1.1 设置cookie:

   可以用 setcookie()或 setrawcookie()函数来设置 cookie。也可以通过向客户端直接发送http  头来
设置。
    1.1.1  使用 setcookie()函数设置cookie:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool
httponly]]]]]] )
   name: cookie 变量名
   value: cookie 变量的值
   expire: 有效期结束的时间
   path: 有效目录
   domain: 有效域名,顶级域唯一
   secure: 如果值为 1,则cookie 只能在https 连接上有效,如果为默认值 0,则http 和 https 都可
以。
例子:

查看更多...

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2278

Php获取客户端IP

function GetIP(){
   if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
           $ip = getenv("HTTP_CLIENT_IP");
       else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
           $ip = getenv("HTTP_X_FORWARDED_FOR");
       else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
           $ip = getenv("REMOTE_ADDR");
       else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
           $ip = $_SERVER['REMOTE_ADDR'];
       else
           $ip = "unknown";
   return($ip);
}

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2345

MySQL日期时间函数大全

DAYOFWEEK(date)
 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)
mysql> select DAYOFWEEK('1998-02-03');
  -> 3
WEEKDAY(date)
 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。
mysql> select WEEKDAY('1997-10-04 22:23:00');
  -> 5
mysql> select WEEKDAY('1997-11-05');
  -> 2
DAYOFMONTH(date)
 返回date是一月中的第几日(在1到31范围内)
mysql> select DAYOFMONTH('1998-02-03');
  -> 3
DAYOFYEAR(date)
 返回date是一年中的第几日(在1到366范围内)
mysql> select DAYOFYEAR('1998-02-03');
  -> 34
MONTH(date)
 返回date中的月份数值
mysql> select MONTH('1998-02-03');
  -> 2
DAYNAME(date)
 返回date是星期几(按英文名返回)
mysql> select DAYNAME("1998-02-05");
  -> 'Thursday'
MONTHNAME(date)
 返回date是几月(按英文名返回)
mysql> select MONTHNAME("1998-02-05");
  -> 'February'
QUARTER(date)
 返回date是一年的第几个季度
mysql> select QUARTER('98-04-01');
  -> 2
WEEK(date,first)
 返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始)
mysql> select WEEK('1998-02-20');
  -> 7
mysql> select WEEK('1998-02-20',0);
  -> 7
mysql> select WEEK('1998-02-20',1);
  -> 8
YEAR(date)
 返回date的年份(范围在1000到9999)
mysql> select YEAR('98-02-03');
  -> 1998
HOUR(time)
 返回time的小时数(范围是0到23)
mysql> select HOUR('10:05:03');
  -> 10
MINUTE(time)
 返回time的分钟数(范围是0到59)
mysql> select MINUTE('98-02-03 10:05:03');
  -> 5
SECOND(time)
 返回time的秒数(范围是0到59)
mysql> select SECOND('10:05:03');
  -> 3
PERIOD_ADD(P,N)
 增加N个月到时期P并返回(P的格式YYMM或YYYYMM)
mysql> select PERIOD_ADD(9801,2);
  -> 199803
PERIOD_DIFF(P1,P2)
 返回在时期P1和P2之间月数(P1和P2的格式YYMM或YYYYMM)
mysql> select PERIOD_DIFF(9802,199703);
  -> 11
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
 对日期时间进行加减法运算
 (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符 和-而不是函数
 date是一个DATETIME或DATE值,expr对date进行加减法的一个表达式字符串type指明表达式expr应该如何被解释
 [type值 含义 期望的expr格式]:
 SECOND 秒 SECONDS
 MINUTE 分钟 MINUTES
 HOUR 时间 HOURS
 DAY 天 DAYS
 MONTH 月 MONTHS
 YEAR 年 YEARS
 MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"
 HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"
 DAY_HOUR 天和小时 "DAYS HOURS"
 YEAR_MONTH 年和月 "YEARS-MONTHS"
 HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"
 DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"
 DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"
 expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个DATE值,否则结果是一个DATETIME值)
 如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)
 如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数)
mysql> Select "1997-12-31 23:59:59" INTERVAL 1 SECOND;
  -> 1998-01-01 00:00:00
mysql> Select INTERVAL 1 DAY "1997-12-31";
  -> 1998-01-01
mysql> Select "1998-01-01" - INTERVAL 1 SECOND;
  -> 1997-12-31 23:59:59
mysql> Select DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);
  -> 1998-01-01 00:00:00
mysql> Select DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY);
  -> 1998-01-01 23:59:59
mysql> Select DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND);
  -> 1998-01-01 00:01:00
mysql> Select DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND);
  -> 1997-12-30 22:58:59
mysql> Select DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);
  -> 1997-12-30 14:00:00
mysql> Select DATE_SUB("1998-01-02", INTERVAL 31 DAY);
  -> 1997-12-02
mysql> Select EXTRACT(YEAR FROM "1999-07-02");
  -> 1999
mysql> Select EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
  -> 199907
mysql> Select EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
  -> 20102
TO_DAYS(date)
 返回日期date是西元0年至今多少天(不计算1582年以前)
mysql> select TO_DAYS(950501);
  -> 728779
mysql> select TO_DAYS('1997-10-07');
  -> 729669
FROM_DAYS(N)
 给出西元0年至今多少天返回DATE值(不计算1582年以前)
mysql> select FROM_DAYS(729669);
  -> '1997-10-07'
DATE_FORMAT(date,format)
 根据format字符串格式化date值
 (在format字符串中可用标志符:
 %M 月名字(January……December)
 %W 星期名字(Sunday……Saturday)
 %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
 %Y 年, 数字, 4 位
 %y 年, 数字, 2 位
 %a 缩写的星期名字(Sun……Sat)
 %d 月份中的天数, 数字(00……31)
 %e 月份中的天数, 数字(0……31)
 %m 月, 数字(01……12)
 %c 月, 数字(1……12)
 %b 缩写的月份名字(Jan……Dec)
 %j 一年中的天数(001……366)
 %H 小时(00……23)
 %k 小时(0……23)
 %h 小时(01……12)
 %I 小时(01……12)
 %l 小时(1……12)
 %i 分钟, 数字(00……59)
 %r 时间,12 小时(hh:mm:ss [AP]M)
 %T 时间,24 小时(hh:mm:ss)
 %S 秒(00……59)
 %s 秒(00……59)
 %p AM或PM
 %w 一个星期中的天数(0=Sunday ……6=Saturday )
 %U 星期(0……52), 这里星期天是星期的第一天
 %u 星期(0……52), 这里星期一是星期的第一天
 %% 字符% )
mysql> select DATE_FORMAT('1997-10-04 22:23:00','%W %M %Y');
  -> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00','%H:%i:%s');
  -> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00','%D %y %a %d %m %b %j');
  -> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00','%H %k %I %r %T %S %w');
  -> '22 22 10 10:23:00 PM 22:23:00 00 6'
TIME_FORMAT(time,format)
 和DATE_FORMAT()类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0)
CURDATE()
CURRENT_DATE()
 以'YYYY-MM-DD'或YYYYMMDD格式返回当前日期值(根据返回值所处上下文是字符串或数字)
mysql> select CURDATE();
  -> '1997-12-15'
mysql> select CURDATE() 0;
  -> 19971215
CURTIME()
CURRENT_TIME()
 以'HH:MM:SS'或HHMMSS格式返回当前时间值(根据返回值所处上下文是字符串或数字)
mysql> select CURTIME();
  -> '23:50:26'
mysql> select CURTIME() 0;
  -> 235026
NOW()
SYSDATE()
CURRENT_TIMESTAMP()
 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前日期时间(根据返回值所处上下文是字符串或数字)
mysql> select NOW();
  -> '1997-12-15 23:50:26'
mysql> select NOW() 0;
  -> 19971215235026
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
 返回一个Unix时间戳(从'1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间)
mysql> select UNIX_TIMESTAMP();
  -> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
  -> 875996580
FROM_UNIXTIME(unix_timestamp)
 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下文是字符串或数字)
mysql> select FROM_UNIXTIME(875996580);
  -> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) 0;
  -> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
 以format字符串格式返回时间戳的值
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x');
  -> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
 以'HH:MM:SS'或HHMMSS格式返回秒数转成的TIME值(根据返回值所处上下文是字符串或数字)
mysql> select SEC_TO_TIME(2378);
  -> '00:39:38'
mysql> select SEC_TO_TIME(2378) 0;
  -> 3938
TIME_TO_SEC(time)
 返回time值有多少秒
mysql> select TIME_TO_SEC('22:23:00');
  -> 80580
mysql> select TIME_TO_SEC('00:39:38');
  -> 2378

Tags: mysql

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2643

js日期选择

/**
 *本日历选择控件由tiannet根据前人经验完善而得。大部分代码来自meizz的日历控件。
 *tiannet添加了时间选择功能、select,object标签隐藏功能,还有其它小功能。
 *使用方法:
 * (1)只选择日期   <input type="text" name="date"   readOnly onClick="setDay(this);">
 * (2)选择日期和小时  <input type="text" name="dateh"  readOnly onClick="setDayH(this);">
 * (3)选择日期和小时及分钟 <input type="text" name="datehm" readOnly onClick="setDayHM(this);">
 *设置参数的方法
 * (1)设置日期分隔符    setDateSplit(strSplit);默认为"-"
 * (2)设置日期与时间之间的分隔符  setDateTimeSplit(strSplit);默认为" "
 * (3)设置时间分隔符    setTimeSplit(strSplit);默认为":"
 * (4)设置(1),(2),(3)中的分隔符  setSplit(strDateSplit,strDateTimeSplit,strTimeSplit);
 * (5)设置开始和结束年份    setYearPeriod(intDateBeg,intDateEnd)
 *说明:
 * 默认返回的日期时间格式如同:2005-02-02 08:08
 */
//------------------ 样式定义 ---------------------------//
//功能按钮同样样式
var s_tiannet_turn_base = "height:16px;font-size:9pt;color:white;border:0 solid #CCCCCC;cursor:hand;background-color:#2650A6;";
//翻年、月等的按钮
var s_tiannet_turn = "width:28px;" + s_tiannet_turn_base;
//关闭、清空等按钮样式
var s_tiannet_turn2 = "width:22px;" + s_tiannet_turn_base;
//年选择下拉框
var s_tiannet_select = "width:64px;display:none;";
//月、时、分选择下拉框
var s_tiannet_select2 = "width:46px;display:none;";
//日期选择控件体的样式
var s_tiannet_body = "width:150;background-color:#2650A6;display:none;z-index:9998;position:absolute;" +
  "border-left:1 solid #CCCCCC;border-top:1 solid #CCCCCC;border-right:1 solid #999999;border-bottom:1 solid #999999;";
//显示日的td的样式
var s_tiannet_day = "width:21px;height:20px;background-color:#D8F0FC;font-size:10pt;";
//字体样式
var s_tiannet_font = "color:#FFCC00;font-size:9pt;cursor:hand;";
//链接的样式
var s_tiannet_link = "text-decoration:none;font-size:9pt;color:#2650A6;";
//横线
var s_tiannet_line = "border-bottom:1 solid #6699CC";
//------------------ 变量定义 ---------------------------//
var tiannetYearSt = 1950;//可选择的开始年份
var tiannetYearEnd = 2010;//可选择的结束年份
var tiannetDateNow = new Date();
var tiannetYear = tiannetDateNow.getFullYear(); //定义年的变量的初始值
var tiannetMonth = tiannetDateNow.getMonth()+1; //定义月的变量的初始值
var tiannetDay = tiannetDateNow.getDate();
var tiannetHour = 8;//tiannetDateNow.getHours();
var tiannetMinute = 0;//tiannetDateNow.getMinutes();
var tiannetArrDay=new Array(42);          //定义写日期的数组
var tiannetDateSplit = "-";     //日期的分隔符号
var tiannetDateTimeSplit = " ";    //日期与时间之间的分隔符
var tiannetTimeSplit = ":";     //时间的分隔符号
var tiannetOutObject;      //接收日期时间的对象
var arrTiannetHide = new Array();//被强制隐藏的标签
var m_bolShowHour = false;//是否显示小时
var m_bolShowMinute = false;//是否显示分钟

var m_aMonHead = new Array(12);         //定义阳历中每个月的最大天数
    m_aMonHead[0] = 31; m_aMonHead[1] = 28; m_aMonHead[2] = 31; m_aMonHead[3] = 30; m_aMonHead[4]  = 31; m_aMonHead[5]  = 30;
    m_aMonHead[6] = 31; m_aMonHead[7] = 31; m_aMonHead[8] = 30; m_aMonHead[9] = 31; m_aMonHead[10] = 30; m_aMonHead[11] = 31;
// ---------------------- 用户可调用的函数 -----------------------------//
//用户主调函数-只选择日期
function setDay(obj){
 tiannetOutObject = obj;
 //如果标签中有值,则将日期初始化为当前值
 var strValue = tiannetTrim(tiannetOutObject.value);
 if( strValue != "" ){
  tiannetInitDate(strValue);
 }
 tiannetPopCalendar();
}
//用户主调函数-选择日期和小时
function setDayH(obj){
 tiannetOutObject = obj;
 m_bolShowHour = true;
 //如果标签中有值,则将日期和小时初始化为当前值
 var strValue = tiannetTrim(tiannetOutObject.value);
 if( strValue != "" ){
  tiannetInitDate(strValue.substring(0,10));
  var hour = strValue.substring(11,13);
  if( hour < 10 ) tiannetHour = hour.substring(1,2);
 }
 tiannetPopCalendar();
}
//用户主调函数-选择日期和小时及分钟
function setDayHM(obj){
 tiannetOutObject = obj;
 m_bolShowHour = true;
 m_bolShowMinute = true;
 //如果标签中有值,则将日期和小时及分钟初始化为当前值
 var strValue = tiannetTrim(tiannetOutObject.value);
 if( strValue != "" ){
  tiannetInitDate(strValue.substring(0,10));
  var time = strValue.substring(11,16);
  var arr = time.split(tiannetTimeSplit);
  tiannetHour = arr[0];
  tiannetMinute = arr[1];
  if( tiannetHour < 10 ) tiannetHour = tiannetHour.substring(1,2);
  if( tiannetMinute < 10 ) tiannetMinute = tiannetMinute.substring(1,2);
 }
 tiannetPopCalendar();
}
//设置开始日期和结束日期
function  setYearPeriod(intDateBeg,intDateEnd){
 tiannetYearSt = intDateBeg;
 tiannetYearEnd = intDateEnd;
}
//设置日期分隔符。默认为"-"
function setDateSplit(strDateSplit){
 tiannetDateSplit = strDateSplit;
}
//设置日期与时间之间的分隔符。默认为" "
function setDateTimeSplit(strDateTimeSplit){
 tiannetDateTimeSplit = strDateTimeSplit;
}
//设置时间分隔符。默认为":"
function setTimeSplit(strTimeSplit){
 tiannetTimeSplit = strTimeSplit;
}
//设置分隔符
function setSplit(strDateSplit,strDateTimeSplit,strTimeSplit){
 tiannetDateSplit(strDateSplit);
 tiannetDateTimeSplit(strDateTimeSplit);
 tiannetTimeSplit(strTimeSplit);
}
//设置默认的日期。格式为:YYYY-MM-DD
function setDefaultDate(strDate){
 tiannetYear = strDate.substring(0,4);
 tiannetMonth = strDate.substring(5,7);
 tiannetDay = strDate.substring(8,10);
}
//设置默认的时间。格式为:HH24:MI
function setDefaultTime(strTime){
 tiannetHour = strTime.substring(0,2);
 tiannetMinute = strTime.substring(3,5);
}
// ---------------------- end 用户可调用的函数 -----------------------------//
//------------------ begin 页面显示部分 ---------------------------//
var weekName = new Array("日","一","二","三","四","五","六");
document.write('<div id="divTiannetDate" style="'+s_tiannet_body+'" style="本日历选择控件由tiannet根据前人经验完善而成!">');
document.write('<div align="center" id="divTiannetDateText" Author="tiannet" style="padding-top:2px;">');
document.write('<span id="tiannetYearHead" Author="tiannet" style="'+s_tiannet_font+'" '+
    'onclick="spanYearCEvent();">&nbsp;年</span>');
document.write('<select id="selTianYear" style="'+s_tiannet_select+'" Author="tiannet"  '+
    ' onChange="tiannetYear=this.value;tiannetSetDay(tiannetYear,tiannetMonth);document.all.tiannetYearHead.style.display=\'\';'+
    'this.style.display=\'none\';">');
for(var i=tiannetYearSt;i <= tiannetYearEnd;i ++){
 document.writeln('<option value="' + i + '">' + i + '年</option>');
}
document.write('</select>');
document.write('<span id="tiannetMonthHead" Author="tiannet" style="'+s_tiannet_font+'" '+
    'onclick="spanMonthCEvent();">&nbsp;&nbsp;月</span>');
document.write('<select id="selTianMonth" style="'+s_tiannet_select2+'" Author="tiannet" '+
    'onChange="tiannetMonth=this.value;tiannetSetDay(tiannetYear,tiannetMonth);document.all.tiannetMonthHead.style.display=\'\';'+
    'this.style.display=\'none\';">');
for(var i=1;i <= 12;i ++){
 document.writeln('<option value="' + i + '">' + i + '月</option>');
}
document.write('</select>');
//document.write('</div>');
//document.write('<div align="center" id="divTiannetTimeText" Author="tiannet">');
document.write('<span id="tiannetHourHead" Author="tiannet" style="'+s_tiannet_font+'display:none;" '+
    'onclick="spanHourCEvent();">&nbsp;时</span>');
document.write('<select id="selTianHour" style="'+s_tiannet_select2+'display:none;" Author="tiannet" '+
    ' onChange="tiannetHour=this.value;tiannetWriteHead();document.all.tiannetHourHead.style.display=\'\';' +
    'this.style.display=\'none\';">');
for(var i=0;i <= 23;i ++){
 document.writeln('<option value="' + i + '">' + i + '时</option>');
}
document.write('</select>');
document.write('<span id="tiannetMinuteHead" Author="tiannet" style="'+s_tiannet_font+'display:none;" '+
    'onclick="spanMinuteCEvent();">&nbsp;&nbsp;分</span>');
document.write('<select id="selTianMinute" style="'+s_tiannet_select2+'display:none;" Author="tiannet" '+
    '  onChange="tiannetMinute=this.value;tiannetWriteHead();document.all.tiannetMinuteHead.style.display=\'\';'+
    'this.style.display=\'none\';">');
for(var i=0;i <= 59;i ++){
 document.writeln('<option value="' + i + '">' + i + '分</option>');
}
document.write('</select>');
document.write('</div>');
//输出一条横线
document.write('<div style="'+s_tiannet_line+'"></div>');
document.write('<div align="center" id="divTiannetTurn" style="border:0;" Author="tiannet">');
document.write('<input type="button" style="'+s_tiannet_turn+'" value="年↑" title="上一年" onClick="tiannetPrevYear();">');
document.write('<input type="button" style="'+s_tiannet_turn+'" value="年↓" title="下一年" onClick="tiannetNextYear();">&nbsp;');
document.write('<input type="button" style="'+s_tiannet_turn+'" value="月↑" title="上一月" onClick="tiannetPrevMonth();">');
document.write('<input type="button" style="'+s_tiannet_turn+'" value="月↓" title="下一月" onClick="tiannetNextMonth();">');
document.write('</div>');
//输出一条横线
document.write('<div style="'+s_tiannet_line+'"></div>');
document.write('<table border=0 cellspacing=0 cellpadding=0  bgcolor=white onselectstart="return false">');
document.write(' <tr style="background-color:#2650A6;font-size:10pt;color:white;height:22px;" Author="tiannet">');
for(var i =0;i < weekName.length;i ++){
 //输出星期
 document.write('<td width="21" align="center" Author="tiannet">' + weekName[i] + '</td>');
}
document.write(' </tr>');
document.write('</table>');
//输出天的选择
document.write('<table border=0 cellspacing=1 cellpadding=0  bgcolor=white onselectstart="return false">');
var n = 0;
for (var i=0;i<5;i++) {
 document.write (' <tr align=center id="trTiannetDay' + i + '" >');
 for (var j=0;j<7;j++){
  document.write('<td align="center" id="tdTiannetDay' + n + '" '+
    'onClick="tiannetDay=this.innerText;tiannetSetValue(true);" '
   +' style="' + s_tiannet_day + '">&nbsp;</td>');
  n ++;
 }
 document.write (' </tr>');
}
document.write (' <tr align=center id="trTiannetDay5" >');
document.write('<td align="center" id="tdTiannetDay35" onClick="tiannetDay=this.innerText;tiannetSetValue(true);" '
    +' style="' + s_tiannet_day + '">&nbsp;</td>');
document.write('<td align="center" id="tdTiannetDay36" onClick="tiannetDay=this.innerText;tiannetSetValue(true);" '
    +' style="' + s_tiannet_day + '">&nbsp;</td>');
document.write('<td align="right" colspan="5"><a href="javascript:tiannetClear();" style="' + s_tiannet_link + '">清空</a>'+
    '&nbsp;<a href="javascript:tiannetHideControl();" style="' + s_tiannet_link + '">关闭</a>' +
    '&nbsp;<a href="javascript:tiannetSetValue(true);" style="' + s_tiannet_link + '">确定</a>&nbsp;' +
    '</td>');
document.write (' </tr>');
document.write('</table>');
document.write('</div>');
//------------------ end 页面显示部分 ---------------------------//
//------------------ 显示日期时间的span标签响应事件 ---------------------------//
//单击年份span标签响应
function spanYearCEvent(){
 hideElementsById(new Array("selTianYear","tiannetMonthHead"),false);
 if(m_bolShowHour) hideElementsById(new Array("tiannetHourHead"),false);
 if(m_bolShowMinute) hideElementsById(new Array("tiannetMinuteHead"),false);
 hideElementsById(new Array("tiannetYearHead","selTianMonth","selTianHour","selTianMinute"),true);
}
//单击月份span标签响应
function spanMonthCEvent(){
 hideElementsById(new Array("selTianMonth","tiannetYearHead"),false);
 if(m_bolShowHour) hideElementsById(new Array("tiannetHourHead"),false);
 if(m_bolShowMinute) hideElementsById(new Array("tiannetMinuteHead"),false);
 hideElementsById(new Array("tiannetMonthHead","selTianYear","selTianHour","selTianMinute"),true);
}
//单击小时span标签响应
function spanHourCEvent(){
 hideElementsById(new Array("tiannetYearHead","tiannetMonthHead"),false);
 if(m_bolShowHour) hideElementsById(new Array("selTianHour"),false);
 if(m_bolShowMinute) hideElementsById(new Array("tiannetMinuteHead"),false);
 hideElementsById(new Array("tiannetHourHead","selTianYear","selTianMonth","selTianMinute"),true);
}
//单击分钟span标签响应
function spanMinuteCEvent(){
 hideElementsById(new Array("tiannetYearHead","tiannetMonthHead"),false);
 if(m_bolShowHour) hideElementsById(new Array("tiannetHourHead"),false);
 if(m_bolShowMinute) hideElementsById(new Array("selTianMinute"),false);
 hideElementsById(new Array("tiannetMinuteHead","selTianYear","selTianMonth","selTianHour"),true);
}
//根据标签id隐藏或显示标签
function hideElementsById(arrId,bolHide){
 var strDisplay = "";
 if(bolHide) strDisplay = "none";
 for(var i = 0;i < arrId.length;i ++){
  var obj = document.getElementById(arrId[i]);
  obj.style.display = strDisplay;
 }
}
//------------------ end 显示日期时间的span标签响应事件 ---------------------------//
//判断某年是否为闰年
function isPinYear(year){
 var bolRet = false;
 if (0==year%4&&((year%100!=0)||(year%400==0))) {
  bolRet = true;
 }
 return bolRet;
}
//得到一个月的天数,闰年为29天
function getMonthCount(year,month){
 var c=m_aMonHead[month-1];
 if((month==2)&&isPinYear(year)) c++;
 return c;
}
//重新设置当前的日。主要是防止在翻年、翻月时,当前日大于当月的最大日
function setRealDayCount() {
 if( tiannetDay > getMonthCount(tiannetYear,tiannetMonth) ) {
  //如果当前的日大于当月的最大日,则取当月最大日
  tiannetDay = getMonthCount(tiannetYear,tiannetMonth);
 }
}
//在个位数前加零
function addZero(value){
 if(value < 10 ){
  value = "0" + value;
 }
 return value;
}
//取出空格
function tiannetTrim(str) {
 return str.replace(/(^\s*)|(\s*$)/g,"");
}
//为select创建一个option
function createOption(objSelect,value,text){
 var option = document.createElement("OPTION");
 option.value = value;
 option.text = text;
 objSelect.options.add(option);
}
//往前翻 Year
function tiannetPrevYear() {
 if(tiannetYear > 999 && tiannetYear <10000){tiannetYear--;}
 else{alert("年份超出范围(1000-9999)!");}
 tiannetSetDay(tiannetYear,tiannetMonth);
 //如果年份小于允许的最小年份,则创建对应的option
 if( tiannetYear < tiannetYearSt ) {
  tiannetYearSt = tiannetYear;
  createOption(document.all.selTianYear,tiannetYear,tiannetYear + "年");
 }
 checkSelect(document.all.selTianYear,tiannetYear);
 tiannetWriteHead();
}
//往后翻 Year
function tiannetNextYear() {
 if(tiannetYear > 999 && tiannetYear <10000){tiannetYear++;}
 else{alert("年份超出范围(1000-9999)!");return;}
 tiannetSetDay(tiannetYear,tiannetMonth);
 //如果年份超过允许的最大年份,则创建对应的option
 if( tiannetYear > tiannetYearEnd ) {
  tiannetYearEnd = tiannetYear;
  createOption(document.all.selTianYear,tiannetYear,tiannetYear + "年");
 }
 checkSelect(document.all.selTianYear,tiannetYear);
 tiannetWriteHead();
}
//选择今天
function tiannetToday() {
 tiannetYear = tiannetDateNow.getFullYear();
 tiannetMonth = tiannetDateNow.getMonth()+1;
 tiannetDay = tiannetDateNow.getDate();
 tiannetSetValue(true);
 //tiannetSetDay(tiannetYear,tiannetMonth);
 //selectObject();
}
//往前翻月份
function tiannetPrevMonth() {
 if(tiannetMonth>1){tiannetMonth--}else{tiannetYear--;tiannetMonth=12;}
 tiannetSetDay(tiannetYear,tiannetMonth);
 checkSelect(document.all.selTianMonth,tiannetMonth);
 tiannetWriteHead();
}
//往后翻月份
function tiannetNextMonth() {
 if(tiannetMonth==12){tiannetYear++;tiannetMonth=1}else{tiannetMonth++}
 tiannetSetDay(tiannetYear,tiannetMonth);
 checkSelect(document.all.selTianMonth,tiannetMonth);
 tiannetWriteHead();
}
//向span标签中写入年、月、时、分等数据
function tiannetWriteHead(){
 document.all.tiannetYearHead.innerText = tiannetYear + "年";
 document.all.tiannetMonthHead.innerText = tiannetMonth + "月";
 if( m_bolShowHour )  document.all.tiannetHourHead.innerText = " "+tiannetHour + "时";
 if( m_bolShowMinute ) document.all.tiannetMinuteHead.innerText = tiannetMinute + "分";
 tiannetSetValue(false);//给文本框赋值,但不隐藏本控件
}
//设置显示天
function tiannetSetDay(yy,mm) {
 
 setRealDayCount();//设置当月真实的日
 tiannetWriteHead();
 var strDateFont1 = "", strDateFont2 = "" //处理日期显示的风格
 for (var i = 0; i < 37; i++){tiannetArrDay[i]=""};  //将显示框的内容全部清空
 var day1 = 1;
 var firstday = new Date(yy,mm-1,1).getDay();  //某月第一天的星期几
 for (var i = firstday; day1 < getMonthCount(yy,mm)+1; i++){
  tiannetArrDay[i]=day1;day1++;
 }
 //如果用于显示日的最后一行的第一个单元格的值为空,则隐藏整行。
 //if(tiannetArrDay[35] == ""){
 // document.all.trTiannetDay5.style.display = "none";
 //} else {
 // document.all.trTiannetDay5.style.display = "";
 //}
 for (var i = 0; i < 37; i++){
  var da = eval("document.all.tdTiannetDay"+i)     //书写新的一个月的日期星期排列
  if (tiannetArrDay[i]!="") {
   //判断是否为周末,如果是周末,则改为红色字体
   if(i % 7 == 0 || (i+1) % 7 == 0){
   strDateFont1 = "<font color=#f0000>"
   strDateFont2 = "</font>"
   } else {
    strDateFont1 = "";
    strDateFont2 = ""
   }
   da.innerHTML = strDateFont1 + tiannetArrDay[i] + strDateFont2;
   //如果是当前选择的天,则改变颜色
   if(tiannetArrDay[i] == tiannetDay ) {
    da.style.backgroundColor = "#CCCCCC";
   } else {
    da.style.backgroundColor = "#EFEFEF";
   }
   da.style.cursor="hand"
  } else {
   da.innerHTML="";da.style.backgroundColor="";da.style.cursor="default"
  }
 }//end for
 tiannetSetValue(false);//给文本框赋值,但不隐藏本控件
}//end function tiannetSetDay
//根据option的值选中option
function checkSelect(objSelect,selectValue) {
 var count = parseInt(objSelect.length);
 if( selectValue < 10 && selectValue.toString().length == 2) {
  selectValue = selectValue.substring(1,2);
 }
 for(var i = 0;i < count;i ++){
  if(objSelect.options[i].value == selectValue){
   objSelect.selectedIndex = i;
   break;
  }
 }//for
}
//选中年、月、时、分等下拉框
function selectObject(){
 //如果年份小于允许的最小年份,则创建对应的option
 if( tiannetYear < tiannetYearSt ) {
  for( var i = tiannetYear;i < tiannetYearSt;i ++  ){
   createOption(document.all.selTianYear,i,i + "年");
  }
  tiannetYearSt = tiannetYear;
 }
 //如果年份超过允许的最大年份,则创建对应的option
 if( tiannetYear > tiannetYearEnd ) {
  for( var i = tiannetYearEnd+1;i <= tiannetYear;i ++  ){
   createOption(document.all.selTianYear,i,i + "年");
  }
  tiannetYearEnd = tiannetYear;
 }
 checkSelect(document.all.selTianYear,tiannetYear);
 checkSelect(document.all.selTianMonth,tiannetMonth);
 if( m_bolShowHour )  checkSelect(document.all.selTianHour,tiannetHour);
 if( m_bolShowMinute ) checkSelect(document.all.selTianMinute,tiannetMinute);
}
//给接受日期时间的控件赋值
//参数bolHideControl - 是否隐藏控件
function tiannetSetValue(bolHideControl){
 var value = "";
 if( !tiannetDay || tiannetDay == "" ){
  tiannetOutObject.value = value;
  return;
 }
 var mm = tiannetMonth;
 var day = tiannetDay;
 if( mm < 10 && mm.toString().length == 1) mm = "0" + mm;
 if( day < 10 && day.toString().length == 1) day = "0" + day;
 value = tiannetYear + tiannetDateSplit + mm + tiannetDateSplit + day;
 if( m_bolShowHour ){
  var hour = tiannetHour;
  if( hour < 10 && hour.toString().length == 1 ) hour = "0" + hour;
  value += tiannetDateTimeSplit + hour;
 }
 if( m_bolShowMinute ){
  var minute = tiannetMinute;
  if( minute < 10 && minute.toString().length == 1 ) minute = "0" + minute;
  value += tiannetTimeSplit + minute;
 }
 tiannetOutObject.value = value;
 //document.all.divTiannetDate.style.display = "none";
 if( bolHideControl ) {
  tiannetHideControl();
 }
}
//是否显示时间
function showTime(){
 if( !m_bolShowHour && m_bolShowMinute){
  alert("如果要选择分钟,则必须可以选择小时!");
  return;
 }
 hideElementsById(new Array("tiannetHourHead","selTianHour","tiannetMinuteHead","selTianMinute"),true);
 if( m_bolShowHour ){
  //显示小时
  hideElementsById(new Array("tiannetHourHead"),false);
 }
 if( m_bolShowMinute ){
  //显示分钟
  hideElementsById(new Array("tiannetMinuteHead"),false);
 }
}
//弹出显示日历选择控件,以让用户选择
function tiannetPopCalendar(){
 //隐藏下拉框,显示相对应的head
 hideElementsById(new Array("selTianYear","selTianMonth","selTianHour","selTianMinute"),true);
 hideElementsById(new Array("tiannetYearHead","tiannetMonthHead","tiannetHourHead","tiannetMinuteHead"),false);
 tiannetSetDay(tiannetYear,tiannetMonth);
 tiannetWriteHead();
 showTime();
 var dads  = document.all.divTiannetDate.style;
 var iX, iY;
 
 var h = document.all.divTiannetDate.offsetHeight;
 var w = document.all.divTiannetDate.offsetWidth;
 //计算left
 if (window.event.x + h > document.body.offsetWidth - 10    )
  iX = window.event.x - h - 5 ;
 else
  iX = window.event.x + 5; 
 if (iX <0) 
  iX=0;
 //计算top
 iY = window.event.y;
 if (window.event.y + w > document.body.offsetHeight - 10   )
  iY = document.body.scrollTop + document.body.offsetHeight - w - 5 ;
 else
  iY = document.body.scrollTop +window.event.y + 5; 
 if (iY <0) 
  iY=0;
 dads.left = iX;
 dads.top = iY;
 tiannetShowControl();
 selectObject();
}
//隐藏日历控件(同时显示被强制隐藏的标签)
function tiannetHideControl(){
 document.all.divTiannetDate.style.display = "none";
 tiannetShowObject();
 arrTiannetHide = new Array();//将被隐藏的标签对象清空
}
//显示日历控件(同时隐藏会遮挡的标签)
function tiannetShowControl(){
 document.all.divTiannetDate.style.display = "";
 tiannetHideObject("Select");
 tiannetHideObject("OBJECT");
}
//根据标签名称隐藏标签。如会遮住控件的select,object
function tiannetHideObject(strTagName) {
 
 x = document.all.divTiannetDate.offsetLeft;
 y = document.all.divTiannetDate.offsetTop;
 h = document.all.divTiannetDate.offsetHeight;
 w = document.all.divTiannetDate.offsetWidth;
 
 for (var i = 0; i < document.all.tags(strTagName).length; i++)
 {
 
  var obj = document.all.tags(strTagName)[i];
  if (! obj || ! obj.offsetParent)
   continue;
  // 获取元素对于BODY标记的相对坐标
  var objLeft   = obj.offsetLeft;
  var objTop    = obj.offsetTop;
  var objHeight = obj.offsetHeight;
  var objWidth = obj.offsetWidth;
  var objParent = obj.offsetParent;
 
  while (objParent.tagName.toUpperCase() != "BODY"){
   objLeft  += objParent.offsetLeft;
   objTop   += objParent.offsetTop;
   objParent = objParent.offsetParent;
  }
  //alert("控件左端:" + x + "select左端" + (objLeft + objWidth) + "控件底部:" + (y+h) + "select高:" + objTop);
 
  var bolHide = true;
  if( obj.style.display == "none" || obj.style.visibility == "hidden" || obj.getAttribute("Author") == "tiannet" ){
   //如果标签本身就是隐藏的,则不需要再隐藏。如果是控件中的下拉框,也不用隐藏。
   bolHide = false;
  }
  if(  ( (objLeft + objWidth) > x && (y + h + 20) > objTop && (objTop+objHeight) >  y && objLeft < (x+w) ) && bolHide ){
   //arrTiannetHide.push(obj);//记录被隐藏的标签对象
   arrTiannetHide[arrTiannetHide.length] = obj;
   obj.style.visibility = "hidden";
  }
 
 
 }
}
//显示被隐藏的标签
function tiannetShowObject(){
 for(var i = 0;i < arrTiannetHide.length;i ++){
  //alert(arrTiannetHide[i]);
  arrTiannetHide[i].style.visibility = "";
 }
}
//初始化日期。
function tiannetInitDate(strDate){
 var arr = strDate.split(tiannetDateSplit);
 tiannetYear = arr[0];
 tiannetMonth = arr[1];
 tiannetDay = arr[2];
}
//清空
function tiannetClear(){
 tiannetOutObject.value = "";
 tiannetHideControl();
}
 //任意点击时关闭该控件
function document.onclick(){
  with(window.event.srcElement){
 if (tagName != "INPUT" && getAttribute("Author") != "tiannet")
    tiannetHideControl();
  }
}
//按ESC键关闭该控件
function document.onkeypress(){
 if( event.keyCode == 27 ){
  tiannetHideControl();
 }
}

范例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <title></title>
        <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
        <meta name="ProgId" content="VisualStudio.HTML">
        <meta name="Originator" content="Microsoft Visual Studio .NET 7.1">
        <script src="js/Calendar.js"></script>
    </head>
    <body>
        (1)只选择日期   <input type="text" name="date"   readOnly onClick="setDay(this);"><br/>
(2)选择日期和小时  <input type="text" name="dateh"  readOnly onClick="setDayH(this);"><br/>
(3)选择日期和小时及分钟 <input type="text" name="datehm" readOnly onClick="setDayHM(this);">

    </body>
</html>

Tags: javascript

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2889

PHP之include和require的区别

1.报错

include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码
require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码

用例子来说话,写两个php文件,名字为test-include.php  和test-require.php,
注意相同的目录中,不要存在一个名字是test-nothing.php的文件。
test-include.php
<?php
include 'test-nothing.php';
echo  'abc';
?>

test-require.php
<?php
require 'test-nothing.php';
echo  'abc';
?>


浏览http://localhost/test-include.php,因为没有找到test-nothing.php文件,
我们看到了报错信息,同时,报错信息的下边显示了abc,你看到的可能是类似下边的情况:
Warning: include(test-nothing.php) [function.include]: failed to open stream: No such file or directory in D:\www\test-include.php on line 2

Warning: include() [function.include]: Failed opening 'test-nothing.php' for inclusion (include_path='.;C:\php5\pear') in D:\www\test-include.php on line 2
abc

浏览http://localhost/test-require.php,因为没有找到test-nothing.php文件,我们看到了报错信息,
但是,报错信息的下边没有显示abc,你看到的可能是类似下边的情况:
Warning: require(test-nothing.php) [function.require]: failed to open stream: No such file or directory in D:\www\test-require.php on line 2

Fatal error: require() [function.require]: Failed opening required 'test-nothing' (include_path='.;C:\php5\pear') in D:\www\test-require.php on line 2

2.条件引用

include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数,
例如下面例子,如果变量$somg为真,则将包含文件somefile.php:

if($some){
include 'somefile.php';
}

但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:
if($something){
require 'somefile.php';
}
下面的例子充分说明了这两个函数之间的不同
$i = 1;
while ($i < 3) {
require "somefile.$i.php";
$i++;
}
可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,
很显然这不我们想要的,可以看出这段代码希望在每次循环时,
将不同的文件包含进来,如果要完成这个功能,只能使用函数include()
$i = 1;
while ($i < 3) {
include "somefile.$i.php";
$i++;
}
3.文件引用方式

include()执行时需要引用的文件每次都要进行读取和评估,
require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)

可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,
若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),
可以给想要包括的文件名设置变量,当参数为 include()时使用这个变量

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1967

php截取字符串方法

substr ---  取得部份字符串

语法 : string substr (string string, int start [, int length])

说明 :

substr( )传回 string的一部份字符串,由参数 start和 length指定。

如果 start是正数,传回的字符串将会从 string的第 start个字元开始。

Example :

<?php

    $rest = substr ("abcdef", 1);       // returns "bcdef"

    $rest = substr ("abcdef", 1, 3);   // returns "bcd"

?>

如果 start是负数,传回的字符串将会从 string结尾的第 start个字开始。

Example :

<?php

    $rest = substr ("abcdef", -1);       // returns "f"

    $rest = substr ("abcdef", -2);       // returns "ef"

    $rest = substr ("abcdef", -3, 1);   // returns "d"

?>

如果有给予参数 length而且是正数时,传回的字符串将会从 start传回 length个字元。

如果有给予参数 length而且是负数时,传回的字符串将会结束于 string结尾的第 length个字元。

Example :

<?php

    $rest = substr ("abcdef", 1, -1);   // returns "bcde"

?>


dongyue,2005-01-07 11:10:41

substr ---  取得部份字符串

语法 : string substr (string string, int start [, int length])

说明 :

substr( )传回 string的一部份字符串,由参数 start和 length指定。

如果 start是正数,传回的字符串将会从 string的第 start个字元开始。

Example :

<?php

    $rest = substr ("abcdef", 1);       // returns "bcdef"

    $rest = substr ("abcdef", 1, 3);   // returns "bcd"

?>

如果 start是负数,传回的字符串将会从 string结尾的第 start个字开始。

Example :

<?php

    $rest = substr ("abcdef", -1);       // returns "f"

    $rest = substr ("abcdef", -2);       // returns "ef"

    $rest = substr ("abcdef", -3, 1);   // returns "d"

?>

如果有给予参数 length而且是正数时,传回的字符串将会从 start传回 length个字元。

如果有给予参数 length而且是负数时,传回的字符串将会结束于 string结尾的第 length个字元。

Example :

<?php

    $rest = substr ("abcdef", 1, -1);   // returns "bcde"

?>

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2118

Mysql查询一周内的数据

select * from wap_content where week(created_at) = week(now)

如果你要严格要求是某一年的,那可以这样

查询一天:

select * from table where to_days(column_time) = to_days(now());
select * from table where date(column_time) = curdate();

查询一周:

select * from table where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(column_time);

查询一个月:

select * from table where DATE_SUB(CURDATE(), INTERVAL INTERVAL 1 MONTH) <= date(column_time);

Tags: mysql

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2237

PHP date函数参数详解

PHP date函数参数详解
在页面的最前页加上date_default_timezone_set(PRC);   /*把时间调到北京时间,php5默认为格林威治标准时间*/
date ()a:   "am"或是"pm"
A:   "AM"或是"PM"
d:   几日,两位数字,若不足则补零;从"01"至"31"
D:    星期几,3个英文字母,如:"Fri"
F:    月份,英文全名,如:"January"
h:    12小时制的小时,从"01"至"12"
H:    24小时制的小时,从"00"至"23"
g:    12小时制的小时,不补零;从"1"至"12"
G:    24小时制的小时,不补零;从"0"至"23"
j:    几日,不足不被零;从"1"至"31"
l:    星期几,英文全名,如:"Friday"
m:    月份,两位数字,从"01"至"12"
n:    月份,两位数字,不补零;从"1"至"12"
M:    月份,3个英文字母;如:"Jan"
s:   秒;从"00"至"59"
S:    字尾加英文序数,两个英文字母,如:"21th"
t:    指定月份的天数,从"28"至"31"
U:    总秒数
w:    数字型的星期几,从"0(星期天)"至"6(星期六)"
Y:    年,四位数字
y:    年,两位数字
z: 一年中的第几天;从"1"至"366"
==================================================================
1,年-月-日
表示年可以用大写的Y和小写y;
表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);
表示日可以用小写d和小写j,大写S表示日期的后缀。echo date('Y-m-j');
2007-02-6echo date('y-n-j');
07-2-6大写Y表示年四位数字,而小写y表示年的两位数字;
小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字。echo date('Y-M-j');
2007-Feb-6echo date('Y-m-d');
2007-02-06大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);
没有大写的J,只有小写j表示月份的日期,无前导o;若需要月份带前导则使用小写d。echo date('Y-M-j');
2007-Feb-6echo date('Y-F-jS');
2007-February-6th大写M表示月份的3个缩写字符,而大写F表示月份的英文全写。(没有小写f)
大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。2,时:分:秒默认情况下,PHP解释显示的时间为“格林威治标准时间”,与我们本地的时间相差8个小时。echo date('g:i:s a');
5:56:57 amecho date('h:i:s A');
05:56:57 AM小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。
当使用12小时制时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。echo date('G:i:s');
14:02:26大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数小结:
字母g表示小时不带前导,字母h表示小时带前导;
小写g、h表示12小时制,大写G、H表示24小时制。3,闰年、星期、天echo date('L');
今年是否闰年:0echo date('l');
今天是:Tuesdayecho date('D');
今天是:Tue大写L表示判断今年是否闰年,布尔值,为真返回1,否则为0;
小写l表示当天是星期几的英文全写(Tuesday);
而使用大写D表示星期几的3个字符缩写(Tue)。echo date('w');
今天星期:2echo date('W');
本周是全年中的第 06 周小写w表示星期几,数字形式表示
大写W表示一年中的星期数echo date('t');
本月是 28 天echo date('z');
今天是今年的第 36 天小写t表示当前月份又多少天
小写z表示今天是本年中第几天4,其他
echo date('T');
UTC
大写T表示服务器的时间区域设置echo date('I');
0
大写I表示判断当前是否为夏令时,为真返回1,否则为0echo date('U');
1170769424
大写U表示从1970年1月1日到现在的总秒数,就是Unix时间纪元的UNIX时间戳。echo date('c');
2007-02-06T14:24:43+00:00
小写c表示ISO8601日期,日期格式为YYYY-MM-DD,用字母T来间隔日期和时间,时间格式为HH:MM:SS,时区使用格林威治标准时间(GMT)的偏差来表示。echo date('r');
Tue, 06 Feb 2007 14:25:52 +0000
小写r表示RFC822日期。
5、格式化时间
echo $row["t_time"];    将输出 2008-2-29 12:08:00
echo date("Y-m-d",strtotime($row["t_time"]));   将输出 2008-2-29注,由于$row["t_time"]得到的时间已经是一个字符串,所以需要用strtotime( 字串转时间戳)转一下,否则输出1970-01-01的错误!

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2121

php日期时间函数

 

php函数的多样化和功能相近真是一大特点,同一个应用可以用多种函数实现,这恐怕也是开源的一个弊端了;
      通过对PHP时间函数的系统学习,充分理解了时间戳和时区的概念(这个真的很重要);
      本人把时间函数区分为了时间戳函数(返回值为时间戳)和格式化时间函数(返回时间格式的字串或数组);
      在时间戳函数中,当然time()函数是最重要的了,但是他只能返回当前时间戳,如果需要返回指定时间的时间戳需要使用strtotime()mktime()函数,其中mktime()函数的源时间格式比较固定,而strtotime()就非常灵活了,不仅支持字串的时间按格式,如('Y-m-d H:i:s'),而且可以通过英文的时间描述,计算时间的偏移。
      另外在时间戳函数中还有一个函数在计算程序运行时间中经常使用:microtime(),返回时间的微秒值。

      在格式化时间函数中,最重要的当然是date()函数,通过各种format样式可以组合出所有时间格式,个人认为其他的格式函数有如鸡肋,本人一直用编码‘utf-8’,而strftime()函数需要setlocale()函数的配合,如果设置为‘chs’,会显示为乱码(编码不支持,需要再用iconv()函数做一个编码转换)

下面就PHP的时间函数做详细介绍,也算本人的学习笔记吧:

查看更多...

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2975

PHP日期比较函数

<?php
echo datediff('d', '2010-03-01', date("Y-m-d"), false); 
//日期比较函数
function datediff($interval, $datefrom, $dateto, $using_timestamps = false) { 
     /* 
     $interval can be: 
     yyyy - Number of full years 
     m - Number of full months 
     d - Number of full days 
     w - Number of full weekdays 
     ww - Number of full weeks 
     h - Number of full hours 
     n - Number of full minutes 
     s - Number of full seconds (default) 
     */
     if (!$using_timestamps) { 
         $datefrom = strtotime($datefrom, 0); 
         $dateto = strtotime($dateto, 0); 
     } 
     $difference = $dateto - $datefrom; // Difference in seconds 
     switch($interval) { 
     case 'yyyy': // Number of full years 
         $years_difference = floor($difference / 31536000); 
         if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) { 
             $years_difference--; 
         } 
         if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) { 
             $years_difference++; 
         } 
         $datediff = $years_difference; 
         break; 
     case "m": // Number of full months 
         $months_difference = floor($difference / 2678400); 
         while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) { 
             $months_difference++; 
         } 
         $months_difference--; 
         $datediff = $months_difference; 
         break; 
     case "d": // Number of full days 
         $datediff = floor($difference / 86400); 
         break; 
     case "w": // Number of full weekdays 
         $days_difference = floor($difference / 86400); 
         $weeks_difference = floor($days_difference / 7); // Complete weeks 
         $first_day = date("w", $datefrom); 
         $days_remainder = floor($days_difference % 7); 
         $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder? 
         if ($odd_days > 7) { // Sunday 
             $days_remainder--; 
         } 
         if ($odd_days > 6) { // Saturday 
             $days_remainder--; 
         } 
         $datediff = ($weeks_difference * 5) + $days_remainder; 
         break; 
     case "ww": // Number of full weeks 
         $datediff = floor($difference / 604800); 
         break; 
     case "h": // Number of full hours 
         $datediff = floor($difference / 3600); 
         break; 
     case "n": // Number of full minutes 
         $datediff = floor($difference / 60); 
         break; 
     default: // Number of full seconds (default) 
         $datediff = $difference; 
         break; 
     } 
     return $datediff; 
}
?>

Tags: php

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 3397

 广告位

↑返回顶部↑