1

PHP の datetime 値を MySQL データの 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() は秒を返さないのですか、それともなぜですか?

4

2 に答える 2

2

まず第一に、PHPコードは本当に脳を傷つけていると他の人が示唆しているように. その Unix タイムスタンプをたった 1 行で作成できます。しかし、あなたの本当の質問に答えるために。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 GMT) からの秒数で測定された現在の時刻を返します。

したがって、2 つの値の違いです。彼らの出発点はお互いに遠すぎます。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 に答える