strtotime和date输出不正确

5

我在将数据库中存储的日期的unix时间戳输出时遇到了困难。

$activeWorkRow['WorkDate'] = "9/24/2015 1:45:53 PM";
$locateDate = $activeWorkRow['WorkDate'];
$locateDate = str_replace('/', '-', $locateDate);
//$locateDate = date('m-d-Y', strtotime($locateDate));
//$locateDate = strtotime(date($locateDate));

echo $locateDate."<br>";

输出:

9-24-2015 1:45:53 PM

下一步:
$locateDate = $activeWorkRow['WorkDate'];
$locateDate = str_replace('/', '-', $locateDate);
$locateDate = date('m-d-Y', strtotime(locateDate));
//$locateDate = strtotime(date($locateDate));

输出:

12-31-1969

我正在尝试获取 Unix 时间戳,以便与其他时间进行比较。


您的服务器所在的时区是什么? - Mark Baker
2个回答

2

您的问题出在 str_replace('/', '-', $locateDate); 上。您的日期格式为 m/d/y,通过这个替换,您将其转换为了 m-d-y

但是,strtotime- 视为欧洲式的 d-m-y 格式指示符。在该格式下,9/24/2015 不是有效日期,导致您观察到的输出结果(等同于 date('m-d-Y', 0))。

简单地跳过 str_replace 即可:

$activeWorkRow['WorkDate'] = "9/24/2015 1:45:53 PM";
$locateDate = $activeWorkRow['WorkDate'];
echo strtotime($locateDate);

输出:

1443116753

请参考手册以获取更多细节和注意事项:
如果日期使用m/d/y或d-m-y格式,根据各个组件之间的分隔符进行消歧义:如果分隔符是斜杠(/),则默认为美国式m/d/y;如果分隔符是短横线(-)或句点(.),则默认为欧洲式d-m-y格式。但是,如果年份是两位数并且分隔符是短横线(-),则日期字符串将被解析为y-m-d。
请注意,在显示这些时间戳时,您可能还需要考虑时区(strtotime使用默认值,除非另有指定),但只要比较由同一函数生成的时间戳,您应该没问题。

0
如果你正在使用MySQL,你可以这样说:
mysql> SELECT UNIX_TIMESTAMP();
<?php  
$hostname="your_hostname";  
$username="your_username";  
$password="your_password";  
$db = "your_dbname";   
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);  
foreach($dbh->query('SELECT UNIX_TIMESTAMP()') as $row) {  
    echo "<tr>";  
    echo "<td>" . $row['UNIX_TIMESTAMP()'] . "</td>";   
    echo "</tr>";  
}  
?>

如果您需要指定日期的Unix时间戳,请尝试以下操作:

mysql> SELECT UNIX_TIMESTAMP('2016-01-01 12:00:00');

<?php  
$hostname="your_hostname";  
$username="your_username";  
$password="your_password";  
$db = "your_dbname";  
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);  
foreach($dbh->query('SELECT UNIX_TIMESTAMP("2016-01-01 12:00:00")') as $row) {  
    echo "<tr>";  
    echo "<td>" . $row['UNIX_TIMESTAMP("2016-01-01 12:00:00")'] . "</td>";  
    echo "</tr>";  
}  
?>  

它使用varchar而不是datetime进行存储。我认为这就是为什么我得到了0而不是应该输出的内容。 - John Lang
您可以将一个 varchar 输入到此函数中:SELECT UNIX_TIMESTAMP($activeWorkRow['WorkDate'])。 - Gamal Mustafa
$timestamp = strtotime($mysqltime); echo date("Y-m-d H:i:s", $timestamp); 时间戳 = strtotime($mysqltime); echo date("Y-m-d H:i:s", $timestamp); - Gamal Mustafa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接