PHP中数据库日期字段与本地时间对比及时区切换问题
问题解答
一、筛选数据库中今天或未过期的记录
你可以直接在MySQL查询里把三个字段拼接成标准日期格式,再和当前日期做比较,这种方式效率更高,还能避免PHP与数据库的时区差异问题。示例SQL语句如下:
SELECT * FROM your_table_name WHERE STR_TO_DATE(CONCAT(dateyear, '-', datemonth, '-', dateday), '%Y-%m-%d') >= CURDATE();
STR_TO_DATE会把拼接后的字符串转换为MySQL可识别的日期类型,CURDATE()是MySQL的当前日期函数,这样就能筛选出日期大于等于今天的记录(即未过期或当天的记录)。
如果想用PHP传递的日期来筛选,也可以这么做:
先在PHP中把日期拼成Y-m-d格式:
$today = date("Y-m-d");
然后用预处理语句执行SQL(更安全):
SELECT * FROM your_table_name WHERE STR_TO_DATE(CONCAT(dateyear, '-', datemonth, '-', dateday), '%Y-%m-%d') >= ?;
将$today绑定到查询参数即可。
二、英国服务器让date()输出美国东部时间
完全可以实现,只需要在调用date()函数前,将PHP的默认时区设置为美国东部时区:
// 设置时区为美国东部时间 date_default_timezone_set('America/New_York'); // 此时date()输出的就是美东时间 $year = date("Y"); $day = date("d"); $month = date("m");
注意:务必使用官方标准的时区标识符America/New_York,不要用EST这类缩写——缩写存在歧义,且无法自动适配夏令时切换。
内容的提问来源于stack exchange,提问作者user2471951
相关产品推荐
相关产品推荐

