有关javascript的date和php的date问题

        用户是变态的,在写一个日期控件的时候,要把用户的选择控制在今天和一定期限的时间之间,当初是使用javascript的date函数来获取今天的时间,但是今天用户反映,怎么选择的时间怎么比预想的时间少了两年,后来发现,他的系统时间比真实时间少了两年。狂ft阿

        没办法,只能在服务器端给用户设定今天的时间了。
原来的代码如下:
None.gif <? php
None.gif    
echo " <script> " ;
None.gif    
if ( $type == 0 )
None.gif        
echo   " var minDate = new Date();var time=minDate.getTime();time=time+280*24*3600*1000;var maxDate=new Date(time); " ;
None.gif       
else   if ( $type == 1 || $type == 3 )
None.gif           
echo   " var maxDate=new Date();var maxYear=maxDate.getFullYear();var minYear=maxYear-8;var minDate=new Date(minYear,0,1); " ;
None.gif       
else
None.gif           
echo   " var minDate= new Date();var time=minDate.getTime();time=time+365*24*3600*1000;var maxDate=new Date(time); " ;
None.gif       
echo   " </script> " ;
None.gif
?>

现在修改后的代码如下
None.gif <? php
None.gif    
$newdate   =   date ( " Ymd " , time ());
None.gif    
$newyear   =  (int)( $newdate / 10000 );
None.gif    
$newmonth   =  (int)(( $newdate % 10000 ) / 100 );
None.gif    
$newmonth   =   $newmonth - 1 ;
None.gif    
$newday   =   $newdate % 100 ;
None.gif    
echo " <script> " ;
None.gif    
if ( $type == 0 )
None.gif        
echo   " var minDate = new Date( " . $newyear . " , " . $newmonth . " , " . $newday . " );var time=minDate.getTime();time=time+280*24*3600*1000;var maxDate=new Date(time); " ;
None.gif    
else   if ( $type == 1 || $type == 3 )
None.gif        
echo   " var maxDate=new Date( " . $newyear . " , " . $newmonth . " , " . $newday . " );var maxYear=maxDate.getFullYear();var minYear=maxYear-8;var minDate=new Date(minYear,0,1); " ;
None.gif    
else
None.gif        
echo   " var minDate= new Date( " . $newyear . " , " . $newmonth . " , " . $newday . " );var time=minDate.getTime();time=time+365*24*3600*1000;var maxDate=new Date(time); " ;
None.gif    
echo   " </script> " ;
None.gif
?>



除非有更变态的用户,先保存为静态页面,然后修改时间,保存后再提交,不过我想,小小的时间变量,不会造成sql注入吧?再说是select控件,用户不能对value进行更改的。
附录十两个date的使用方法:
None.gif JScript  语言参考 
None.gif
None.gif
--------------------------------------------------------------------------------
None.gif
None.gifDate 对象
None.gif启用基本存储器并取得日期和时间。
None.gif
None.gifdateObj 
=   new  Date()
None.gifdateObj 
=   new  Date(dateVal)
None.gifdateObj 
=   new  Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]) 
None.gif
None.gif参数
None.gifdateObj
None.gif
None.gif必选项。要赋值为 Date 对象的变量名。
None.gif
None.gifdateVal
None.gif
None.gif必选项。如果是数字值,dateVal 表示指定日期与 
1970  年  1  月  1  日午夜间全球标准时间 的毫秒数。如果是字符串,则 dateVal 按照 parse 方法中的规则进行解析。dateVal 参数也可以是从某些 ActiveX(R) 对象返回的 VT_DATE 值。
None.gif
None.gifyear
None.gif
None.gif必选项。完整的年份,比如,
1976 (而不是  76 )。
None.gif
None.gifmonth
None.gif
None.gif必选项。表示的月份,是从 
0  到  11  之间的整数(  1  月至  12  月)。
None.gif
None.gifdate
None.gif
None.gif必选项。表示日期,是从 
1  到  31  之间的整数。
None.gif
None.gifhours
None.gif
None.gif可选项。 如果提供了 minutes 则必须给出。表示小时,是从 
0  到  23  的整数(午夜到 11pm)。
None.gif
None.gifminutes
None.gif
None.gif可选项。 如果提供了 seconds 则必须给出。表示分钟,是从 
0  到  59  的整数。
None.gif
None.gifseconds
None.gif
None.gif可选项。 如果提供了 milliseconds 则必须给出。表示秒钟,是从 
0  到  59  的整数。
None.gif
None.gifms
None.gif
None.gif可选项。 表示毫秒,是从 
0  到  999  的整数。
None.gif
None.gif说明
None.gifDate 对象保存以毫秒为单位表示特定时间段。如果某个参数的值大于其范围或为负数,则存储的其他值将做相应的调整。例如,如果指定 
150  秒,JScript 将该数字重新定义为  2  分  30  秒。 
None.gif
None.gif如果数字为 NaN,则表示该对象不代表特定的时间段。如果未向 Date 对象传递参数,它将被初始化为当前时间 (UTC)。在能够使用该对象前必须为其赋值。 
None.gif
None.gifDate 对象能够表示的日期范围约等于 
1970  年  1  月  1  日前后各  285 , 616  年。 
None.gif
None.gifDate 对象具有两个不创建 Date 对象就可以调用的静态方法。它们是 parse 和 UTC。 
None.gif
None.gif错误
None.gif下面的示例演示了 Date 对象的用法。
None.gif
ExpandedBlockStart.gifContractedBlock.gif
function  DateDemo() dot.gif {
InBlock.gif   
var d, s = "Today's date is: ";           // 声明变量。
InBlock.gif
   d = new Date();                           // 创建 Date 对象。
InBlock.gif
   s += (d.getMonth() + 1+ "/";            // 获取月份。
InBlock.gif
   s += d.getDate() + "/";                   // 获取日。
InBlock.gif
   s += d.getYear();                         // 获取年份。
InBlock.gif
   return(s);                                // 返回日期。
ExpandedBlockEnd.gif
}

None.gif属性
None.gifconstructor 属性 
|  prototype 属性
None.gif
None.gif方法
None.gifgetDate 方法 
|  getDay 方法  |  getFullYear 方法  |  getHours 方法  |  getMilliseconds 方法  |  getMinutes 方法  |  getMonth 方法  |  getSeconds 方法  |  getTime 方法  |  getTimezoneOffset 方法  |  getUTCDate 方法  |  getUTCDay 方法  |  getUTCFullYear 方法  |  getUTCHours 方法  |  getUTCMilliSeconds 方法  |  getUTCMinutes 方法  |  getUTCMonth 方法  |  getUTCSeconds 方法  |  getVarDate 方法  |  getYear 方法  |  setDate 方法  |  setFullYear 方法  |  setHours 方法  |  setMilliSeconds 方法  |  setMinutes 方法  |  setMonth 方法  |  setSeconds 方法  |  setTime 方法  |  setUTCDate 方法  |  setUTCFullYear 方法  |  setUTCHours 方法  |  setUTCMilliseconds 方法  |  setUTCMinutes 方法  |  setUTCMonth 方法  |  setUTCSeconds 方法  |  setYear 方法  |  toGMTString 方法  |  toLocaleString 方法  |  toUTCString 方法  |  toString 方法  |  valueOf 方法  |  parse 方法  |  UTC 方法
None.gif
None.gif要求
None.gif版本 
1
None.gif
None.gif请参阅
None.gif
new  运算符  |   var  语句
None.gif
None.gif
None.gif
--------------------------------------------------------------------------------
None.gif


None.gif PHP 手册 
None.gif后退  前进 
None.gif 
None.gif
None.gif 
None.gif 
None.gif 
None.gif
None.gif
date
None.gif(PHP 
3 ,  PHP  4 ,  PHP  5 )
None.gif
None.gif
date   --  格式化一个本地时间/日期
None.gif说明
None.gif
string   date  (  string  format [ ,  int timestamp] )
None.gif
None.gif
None.gif返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp 是可选的,默认值为 
time ()。 
None.gif
None.gif提示
:  自 PHP  5.1 . 0  起有几个有用的常量可用作标准的日期/时间格式来指定 format 参数。 
None.gif
None.gif
:  有效的时间戳典型范围是格林威治时间  1901  年  12  月  13  日  20 : 45 : 54  到  2038  年  1  月  19  日  03 : 14 : 07 。(此范围符合  32  位有符号整数的最小值和最大值)。不过在 PHP  5.1  之前此范围在某些系统(如 Windows)中限制为从  1970  年  1  月  1  日到  2038  年  1  月  19  日。 
None.gif
None.gif
:  要将字符串表达的时间转换成时间戳,应该使用  strtotime ()。此外一些数据库有一些函数将其时间格式转换成时间戳(例如  MySQL  的 UNIX_TIMESTAMP 函数)。 
None.gif
None.gif
None.gif表格 
1 .  格式字串可以识别以下 format 参数的字符串
None.gif
None.gifformat 字符 说明 返回值例子 
None.gif日 
---   ---  
None.gifd 月份中的第几天,有前导零的 
2  位数字  01  到  31  
None.gifD 星期中的第几天,文本表示,
3  个字母 Mon 到 Sun 
None.gifj 月份中的第几天,没有前导零 
1  到  31  
None.gifl(“L”的小写字母) 星期几,完整的文本格式 Sunday 到 Saturday 
None.gifN ISO
- 8601  格式数字表示的星期中的第几天(PHP  5.1 . 0  新加)  1 (表示星期一)到  7 (表示星期天) 
None.gifS 每月天数后面的英文后缀,
2  个字符 st,nd,rd 或者 th。可以和 j 一起用 
None.gifw 星期中的第几天,数字表示 
0 (表示星期天)到  6 (表示星期六) 
None.gifz 年份中的第几天 
0  到  366  
None.gif星期 
---   ---  
None.gifW ISO
- 8601  格式年份中的第几周,每周从星期一开始(PHP  4.1 . 0  新加的) 例如: 42 (当年的第  42  周) 
None.gif月 
---   ---  
None.gifF 月份,完整的文本格式,例如 January 或者 March January 到 December 
None.gifm 数字表示的月份,有前导零 
01  到  12  
None.gifM 三个字母缩写表示的月份 Jan 到 Dec 
None.gifn 数字表示的月份,没有前导零 
1  到  12  
None.gift 给定月份所应有的天数 
28  到  31  
None.gif年 
---   ---  
None.gifL 是否为闰年 如果是闰年为 
1 ,否则为  0  
None.gifo ISO
- 8601  格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP  5.1 . 0  新加) Examples :   1999  or  2003  
None.gif
4  位数字完整表示的年份 例如: 1999  或  2003  
None.gif
2  位数字表示的年份 例如: 99  或  03  
None.gif时间 
---   ---  
None.gifa 小写的上午和下午值 am 或 pm 
None.gifA 大写的上午和下午值 AM 或 PM 
None.gifB Swatch Internet 标准时 
000  到  999  
None.gifg 小时,
12  小时格式,没有前导零  1  到  12  
None.gifG 小时,
24  小时格式,没有前导零  0  到  23  
None.gifh 小时,
12  小时格式,有前导零  01  到  12  
None.gifH 小时,
24  小时格式,有前导零  00  到  23  
None.gifi 有前导零的分钟数 
00  到  59 >  
None.gifs 秒数,有前导零 
00  到  59 >  
None.gif时区 
---   ---  
None.gife 时区标识(PHP 
5.1 . 0  新加) 例如:UTC,GMT,Atlantic / Azores 
None.gifI 是否为夏令时 如果是夏令时为 
1 ,否则为  0  
None.gifO 与格林威治时间相差的小时数 例如:
+ 0200  
None.gifT 本机所在的时区 例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如“Eastern Standard 
Time ”,中文版会显示“中国标准时间”)。 
None.gifZ 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 
- 43200  到  43200  
None.gif完整的日期/时间 
---   ---  
None.gifc ISO 
8601  格式的日期(PHP  5  新加)  2004 - 02 - 12T15 : 19 : 21 + 00 : 00  
None.gifr RFC 
822  格式的日期 例如:Thu ,   21  Dec  2000   16 : 01 : 07   + 0200  
None.gifU 从 Unix 纪元(January 
1   1970   00 : 00 : 00  GMT)开始至今的秒数 参见  time () 
None.gif
None.gif
None.gif格式字串中不能被识别的字符将原样显示。Z 格式在使用 
gmdate () 时总是返回  0 。 
None.gif
None.gif例子 
1 .   date () 例子
None.gif
None.gif
<? php
None.gif
//  设定要用的默认时区。自 PHP 5.1 可用
None.gif
date_default_timezone_set( ' UTC ' );
None.gif
None.gif
None.gif
//  输出类似:Monday
None.gif
echo   date ( " l " );
None.gif
None.gif
//  输出类似:Monday 15th of August 2005 03:12:46 PM
None.gif
echo   date ( ' l dS \of F Y h:i:s A ' );
None.gif
None.gif
//  输出:July 1, 2000 is on a Saturday
None.gif
echo   " July 1, 2000 is on a  "   .   date ( " l " ,   mktime ( 0 ,   0 ,   0 ,   7 ,   1 ,   2000 ));
None.gif
None.gif
/*  在格式参数中使用常量  */
None.gif
//  输出类似:Mon, 15 Aug 2005 15:12:46 UTC
None.gif
echo   date (DATE_RFC822);
None.gif
None.gif
//  输出类似:2000-07-01T00:00:00+0000
None.gif
echo   date (DATE_ATOM ,   mktime ( 0 ,   0 ,   0 ,   7 ,   1 ,   2000 ));
None.gif
?>   
None.gif 
None.gif
None.gif
None.gif在格式字串中的字符前加上反斜线来转义可以避免它被按照上表解释。如果加上反斜线后的字符本身就是一个特殊序列,那还要转义反斜线。 例子 
2 .  在  date () 中转义字符
None.gif
None.gif
<? php
None.gif
//  prints something like: Wednesday the 15th
None.gif
echo   date ( " l \\t\h\e jS " );
None.gif
?>   
None.gif 
None.gif
None.gif
None.gif可以把 
date () 和  mktime () 结合使用来得到未来或过去的日期。 例子  3 .   date () 和  mktime () 例子
None.gif
None.gif
<? php
None.gif
$tomorrow    =   mktime ( 0 ,   0 ,   0 ,   date ( " m " )   ,   date ( " d " ) + 1 ,   date ( " Y " ));
None.gif
$lastmonth   =   mktime ( 0 ,   0 ,   0 ,   date ( " m " ) - 1 ,   date ( " d " ) ,     date ( " Y " ));
None.gif
$nextyear    =   mktime ( 0 ,   0 ,   0 ,   date ( " m " ) ,     date ( " d " ) ,     date ( " Y " ) + 1 );
None.gif
?>   
None.gif 
None.gif
None.gif
None.gif
:  由于夏令时的缘故,这种方法比简单地在时间戳上加减一天或者一个月的秒数更可靠。 
None.gif
None.gif
None.gif一些使用 
date () 格式化日期的例子。注意要转义所有其它的字符,因为目前有特殊含义的字符会产生不需要的结果,而其余字符在 PHP 将来的版本中可能会被用上。当转义时,注意用单引号以避免类似 \n 的字符变成了换行符。 例子  4 .   date () 格式举例
None.gif
None.gif
<? php
None.gif
//  假定今天是:March 10th, 2001, 5:16:18 pm
None.gif
$today   =   date ( " F j, Y, g:i a " );                  //  March 10, 2001, 5:16 pm
None.gif
$today   =   date ( " m.d.y " );                          //  03.10.01
None.gif
$today   =   date ( " j, n, Y " );                        //  10, 3, 2001
None.gif
$today   =   date ( " Ymd " );                            //  20010310
None.gif
$today   =   date ( ' h-i-s, j-m-y, it is w Day z  ' );   //  05-16-17, 10-03-01, 1631 1618 6 Fripm01
None.gif
$today   =   date ( ' \i\t \i\s \t\h\e jS \d\a\y. ' );    //  It is the 10th day.
None.gif
$today   =   date ( " D M j G:i:s T Y " );                //  Sat Mar 10 15:16:08 MST 2001
None.gif
$today   =   date ( ' H:m:s \m \i\s\ \m\o\n\t\h ' );      //  17:03:17 m is month
None.gif
$today   =   date ( " H:i:s " );                          //  17:16:17
None.gif
?>   
None.gif 
None.gif
None.gif
None.gif要格式化其它语种的日期,应该用 
setlocale () 和  strftime () 函数来代替  date ()。 
None.gif
None.gif参见 
getlastmod (), gmdate (), mktime (), strftime () 和  time ()。 
None.gif 
None.gif
posted on 2006-03-31 20:54  liuchen 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/liuchen/archive/2006/03/31/363884.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值