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

开始时间大于实际时间。但是“unix 时间戳实际时间”大于“unix 时间戳开始时间”。

我想知道为什么?

相关代码:

$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 年 10 月 12 日)而不是2012-12-10(2012 年 12 月 10 日)。

$postField['startTime']可能是格式10/12/2012(将被解析DateTime为美式日期),而它应该被格式化为10-12-2012(将被解析DateTime为欧式日期)。

因此,最后,检查日期的格式$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 回答