1

これが私の問題です

私のデフォルトのタイムゾーンはdate_default_timezone_set('Europe/Madrid')

actual time 2012-12-06 17:00:38
start time 2012-12-10 16:30:00

unix timestamp actual time 1354809638
unix timestamp start time 1350052200

開始時間は実際の時間よりも長くなっています。ただし、「unixtimestampの実際の時間」は「unixtimestampの開始時間」よりも大きくなります。

なんでだろう?

関連コード:

$to_unix_startTime = new DateTime($postField['startTime']);
$UnixStartTime = $to_unix_startTime->format('U');

$ date = new DateTime(); $ actualTime = $ date-> getTimestamp();

$start = new DateTime($postFields['startAuct']);
        $start->format('Y-m-d H:i:s').PHP_EOL;
        $start_tmstmp = date_timestamp_get($start);
        $date = new DateTime(); 
        $timestamp = $date->getTimestamp();
        if ($timestamp > $start_tmstmp) {
            echo $auctStatus = 1;
        } elseif ($timestamp < $start) {
            echo $auctStatus = 4;
        }
4

2 に答える 2

2

$postField['startTime']は間違った形式です。どうすればこれを知ることができますか? 開始日から取得したタイムスタンプ は、1350052200日付2012-10-12(2012 年2012-12-1012 月 10 日) ではなく (2012 年 10 月 12 日) を表します。

$postField['startTime']はおそらく(アメリカ式の日付として10/12/2012解析される) 形式ですが、 (ヨーロッパ式の日付として解析されます) のようにフォーマットする必要があります。DateTime10-12-2012DateTime

結論として、 の形式をチェックし、$postField['startTime']それがヨーロッパ式の日付表現であることを確認してください。

[編集]比較:

$european = new DateTime( '10-12-2012' );
$american = new DateTime( '10/12/2012' );

echo $european->format( 'Y-m-d' ) . ' (' . $european->getTimestamp() . ')' . PHP_EOL;
echo $american->format( 'Y-m-d' ) . ' (' . $american->getTimestamp() . ')' . PHP_EOL;
于 2012-12-06T17:11:24.527 に答える
0

タイムスタンプを取得する前に日時をフォーマットする必要はありません。

ここで私のコードを確認してください:https ://compilr.com/shadyyx/datetime/index.php

リンクに問題がある場合は、出力のないコードを次に示します。

<?php

date_default_timezone_set('Europe/Madrid');

$start = new DateTime('2012-12-10 16:30:00');
$actual = new DateTime('2012-12-06 17:00:38');

echo $start->format('d.m.Y H:i:s').PHP_EOL;
echo $actual->format('d.m.Y H:i:s').PHP_EOL;
echo PHP_EOL;

$start_tmstmp = $start->getTimestamp();
$act_tmstmp = $actual->getTimestamp();

echo $start_tmstmp.PHP_EOL;
echo $act_tmstmp.PHP_EOL;
echo PHP_EOL;

var_dump($start_tmstmp > $act_tmstmp);
于 2012-12-06T16:54:01.783 に答える