8 c- F4 [2 t1 x; n$ b/ v' w% s5.和第一题不同,本题中脚本执行的平台会影响结果。在Windows下,mktime函数不支持负值(UNIX纪元之前的时间),函数将返回-1(和一个警告)。正确答案是C。 ; J' x3 u7 S( o$ Q% E' B; |/ H& q- P( v5 [' ~
6.由于两个时区有一小时的时差,而strtotime()能把文本表示的日期转换成时间戳,因此结果只能是3600或者-3600(答案A或者B,即一小时相当于的秒数)。现在,最重要的是紧记,CST比EST晚一个小时,也就是当CST是午夜12点时,EST已经是次日了。因此$b比$a大,结果是负数,答案是A。 + U# T( m. I+ L0 W , {* T6 @9 ~: F# Q: V7.数据库存储日期/时间的能力比PHP强。大多数DBMS能够处理格里高利日历上所有的日期,而基于UNIX时间戳的PHP只能处理较短的一个时间段里的日期。因此在脚本中处理日期时,必须确保在它转换成时间戳后不会溢出(答案B)。此外,在处理日期时,无论是验证一个日期的合法性(答案C)还是进行计算(答案D),都最好尽量让数据库来完成。 + J! C8 C8 V# `$ g 9 w) G% }- n, `" S) Y8.这是个很迷惑人的问题,但其实很简单。传给gmmktime()的值其实就是UNIX纪元,转化成时间戳后是0。gmmktime()的内部用到mktime(),后者基于当前地区工作。这里的问题是,UNIX纪元不能被用在本初子午线以东的时区——比如莫斯科。这将产生一个负值,Windows操作系统不支持。因此脚本输出-1,答案是B。也可能会输出一个警告,取决于你的设置(但绝对不是答案D说的“一个错误”)。, Q/ C* W( a. C6 t3 k/ p
4 Y; a @. S }, |/ g8 z6 e. r
9.答案是E。很显然,time()计算从UNIX纪元开始至今经过的秒数,答案A和D都表述了这一点,它们都是正确的。答案B和C说的不是那么直接,但其实也表达了相同的意思。UNIX纪元是一个确定的时间点,因此无论你使用GMT时区或其他你所在的时区,从UNIX纪元至今经过的秒数都是一样的。只有在你把时间戳转换成人们能够理解的表达形式时才需要考虑时区。所以答案B和C也是正确的。这题似乎有点戏弄人的意思,但实际上它考验你对绝对时间与相对时间二者不同之处的认识,这个概念在处理日期时相当重要。4 @2 {( b, I, E$ L4 Z
4 m1 J P$ g2 E10.传递给date()的参数H和s代表24小时制的时间与秒数。i被一个反斜线转义,因此它将被当作字母直接输出。调用strtotime()时没有给出参数,它将返回当天午夜的时间。因此最终的输出是00:i:00,答案是C。 ( G0 [- ]4 p# t5 b# L7 V/ c$ N! e1 I# F% W
11.正确答案是A,当前时间加3600秒(1小时*60分钟*60秒)。其他选项都会产生错误的时间戳。' o S0 ?# K4 Y7 w# T
! w; @+ B9 I3 T% N; i12.getdate函数返回记录指定时间戳相关信息的数组(如果没有指定时间戳,就改用当前日期)。答案是C。/ x5 e/ a. a0 R. n2 e
/ a) A9 N& {) ~1 I A r& z) ?
13.答案是D。microtime函数返回一个由时间戳和小数两部分组成的字符串,两部分由空格分开。因此explode()将字符串分割并放入数组,array_sum()把它们相加,转换成数字。9 V) b6 D! P# a
# C( E$ ]5 s f+ p' q. v9 C
14.答案是B和D。date函数返回字符串,localtime()返回数组。 % @* U& w! [% C7 b, e- f 3 Y5 z; H* g5 v P7 E- o, E7 ]) `3 u15.任何时区下的当前时间都是相同的——当前时间是一个绝对的时间点。答案是B。