1

我想询问有关使用 MySQL 数据中的日期时间值更改 PHP 的日期时间值的问题。

我曾尝试在 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() 不返回一秒还是为什么?

4

2 回答 2

2

首先,正如其他人所建议的那样,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 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来以秒数测量的当前时间。

因此,两个值的差异。他们的出发点相距太远。MySQL 从 0 年开始,PHP 从 1970 年开始。

建议

我建议您将 php 的时间戳保存在 mysql 中,而不是格式化的日期时间。这将帮助您保持一致并允许您轻松执行任何日期或时间比较。

于 2013-01-12T04:42:11.623 回答
0

最后,我将 PHP 更改为 datetime,并在查询中使用 ADD_DAYS 添加一个秒数的日期,然后将其与 PHP datetime 结果进行比较。

非常感谢所有贡献者。

于 2013-01-14T02:26:43.003 回答