我想问一下如何用MySQL数据中的datetime值更改PHP的datetime值
我试着在PHP中这样做:
$sitgl = date('Y-m-d', strtotime(2012-01-12));
$sijam = date('H:i:s', strtotime(13:00:00));
$awal = $sitgl.' '.$sijam;
$awal2 = date('Y-m-d H:i:s', strtotime($awal));
$debrangkat = strtotime($awal2);
和我试图转换相同的日期时间在MySQL像这样(转换为秒):
SELECT date_start_book, time_start_book, (TO_DAYS(CAST(date_start_book AS DATE))*86400) + TIME_TO_SEC(CAST(time_start_book AS TIME)) FROM `t_request_queue` WHERE `request_id` = '1301-0087'
即date_start_book的值为2012-01-12,time_start_book的值为13:00:00
我的问题是:为什么PHP代码返回值:1357970400,但MySQL的值返回63525214800 ?
我该怎么做才能使两个值相等?strtotime()不返回秒数,为什么?
首先,正如其他人所建议的那样,php代码真的会伤害大脑。您可以在一行中创建Unix时间戳。但要回答你真正的问题。MYSQL的TO_DAYS与PHP的UNIX时间戳不同
根据MySQL网站
Given a date date, returns a day number (the number of days since year 0).
mysql> SELECT TO_DAYS(950501);
-> 728779
mysql> SELECT TO_DAYS('2007-10-07');
-> 733321
TO_DAYS() is not intended for use with values that precede the advent of the Gregorian calendar (1582), because it does not take into account the days that were lost when the calendar was changed. For dates before 1582 (and possibly a later year in other locales), results from this function are not reliable
根据PHP网站时间戳是
返回从事件开始以秒数测量的当前时间Unix Epoch (January 1 1970 00:00:00 GMT).
因此是两个值的差。他们的起点离彼此太远了。MySQL从0年开始,PHP从1970年开始。
我建议你将php的时间戳保存在mysql中,而不是格式化的日期时间。这将帮助您保持一致,并允许您轻松执行任何日期或时间比较。
最后,我将PHP更改为datetime,在查询时,我使用ADD_DAYS添加带有秒的日期,然后将其与PHP datetime结果进行比较。
非常感谢所有贡献者。