欢迎转载!转载时请注明出处:http://blog.youkuaiyun.com/nfer_zhuang/article/details/51285483
引言
我在一个项目中需要设置截至时间,但是发现过了截至时间后仍然有效,即如下的代码判断没有表现正常:
if ( strtotime("2016-04-15 23:00:00") > time() ) {
// available, do something
}
else {
// unavailable, stop do something
}
即,当过了设定的2016-04-15 23:00:00之后,仍然是可以操作的,因此当时为了暴力解决,直接在过了23点之后,加了一个false的逻辑与运算:
if ( strtotime("2016-04-15 23:00:00") > time() && false) {
// available, do something
}
当然,在我写这篇总结的时候,就算去掉false的逻辑与运算,程序的运行也是符合预期的。现在就是分析和总结一下wordpress的时区问题。
php环境和shell环境的测试
测试代码如下:
<?php
echo "before set timezone PRC, get timezone:".date_default_timezone_get()."\n";
test();
date_default_timezone_set('PRC');
echo "\nafter set timezone PRC, get timezone:".date_default_timezone_get()."\n";
test();
function test() {
echo " ".strtotime('2016-04-15 23:00:00')." strtotime('2016-04-15 23:00:00'):\n";
echo " ".time()." time():\n";
echo " ".exec('date +%s')." exec('date +%s'):\n";
}
运行结果如下:
before set timezone PRC, get timezone:Asia/Shanghai
1460732400 strtotime('2016-04-15 23:00:00')
1460807831 time()
1460807831 exec('date +%s')
after set timezone PRC, get timezone:PRC
1460732400 strtotime('2016-04-15 23:00:00')
1460807831