今天在学习PHP的时候,有个函数date()。在测试的时候返回的时间不是电脑上的本地时间,如果要返回本地时间,必须在脚本的开头就设置时区。需要用到另外一个函数date_default_timezone_set(),这个函数需要传递一个参数,参数并不是想传入什么就传入什么,在PHP手册中有一个参数列表,如下:

亚洲

Asia/Aden Asia/Almaty Asia/Amman Asia/Anadyr
Asia/Aqtau Asia/Aqtobe Asia/Ashgabat Asia/Atyrau
Asia/Baghdad Asia/Bahrain Asia/Baku Asia/Bangkok
Asia/Barnaul Asia/Beirut Asia/Bishkek Asia/Brunei
Asia/Chita Asia/Choibalsan Asia/Colombo Asia/Damascus
Asia/Dhaka Asia/Dili Asia/Dubai Asia/Dushanbe
Asia/Famagusta Asia/Gaza Asia/Hebron Asia/Ho_Chi_Minh
Asia/Hong_Kong Asia/Hovd Asia/Irkutsk Asia/Jakarta
Asia/Jayapura Asia/Jerusalem Asia/Kabul Asia/Kamchatka
Asia/Karachi Asia/Kathmandu Asia/Khandyga Asia/Kolkata
Asia/Krasnoyarsk Asia/Kuala_Lumpur Asia/Kuching Asia/Kuwait
Asia/Macau Asia/Magadan Asia/Makassar Asia/Manila
Asia/Muscat Asia/Nicosia Asia/Novokuznetsk Asia/Novosibirsk
Asia/Omsk Asia/Oral Asia/Phnom_Penh Asia/Pontianak
Asia/Pyongyang Asia/Qatar Asia/Qostanay Asia/Qyzylorda
Asia/Riyadh Asia/Sakhalin Asia/Samarkand Asia/Seoul
Asia/Shanghai Asia/Singapore Asia/Srednekolymsk Asia/Taipei
Asia/Tashkent Asia/Tbilisi Asia/Tehran Asia/Thimphu
Asia/Tokyo Asia/Tomsk Asia/Ulaanbaatar Asia/Urumqi
Asia/Ust-Nera Asia/Vientiane Asia/Vladivostok Asia/Yakutsk
Asia/Yangon Asia/Yekaterinburg Asia/Yerevan  

需要说明的是,PHP支持的时区:非洲、美洲、南极洲、北极、亚洲、大洋洲、印度、澳洲、欧洲、太平洋地区和其他。而上表中的备选参数并无我们熟悉的北京时间。上表中,表示中国的时区有:
1、Asia/Hong_Kong香港
2、Asia/Shanghai上海
3、Asia/Taipei台湾
我们在设置PHP时区的时候可以设置成Asia/Shanghai表示中国北京时间。表中并没有列出其他时间,但是我们还是可以设置成其他时区。
比如“PRC”就表示中国北京时间,PRC是中华人民共和国的英文缩略词。
Asia/Chongqing表示中国重庆时间(实际上还是北京时间,亲测);
Etc/GMT表示格林威治标准时间,如果改写成Etc/GMT+8表示比格林威治标准时间早8小时,我们东八区要比格林威治时间早8小时,所以理论上设置成Etc/GMT+8表示北京时间?不不不,北京时间要设置成Etc/GMT-8,很奇怪的事情。在PHP中使用格林威治时区的方法来设置北京时间就必须写成Etc/GMT-8。虽然没道理,但是这就是王八的腿——规定。

因为我们国家地理位置在地球上的经度跨度巨大,最东边和最西边相差好几个小时,时区也就跨了好几个。当初在划分时区的时候和现在全国统一的北京时间又不一样,所以出现了一些差异。

回归问题本身,除了在脚本开头设置时区之外,还可以在系统文件中设置时区。这个巨大的好处就是,只需要修改一个地方,所有脚本都不用再单独设置时区了。