【问题标题】:Extracting time from timestamp variable从时间戳变量中提取时间
【发布时间】:2021-02-18 11:29:45
【问题描述】:

我有一个名为“recentdata”的表,其中包含三列 TagID、Timestam 和 GateNO。我正在尝试从特定行的 Timestamp 变量中提取时间。我通过 php 代码发送所有数据。

基本上我首先存储数据,然后我想读回时间戳并提取时间。

这是我的代码 sn-p:

$sql = "SELECT Timestamp FROM recentdata Where TagID='".$tagID."'";
$retval = mysqli_query($this->link,$sql) or die('Errant query:  '.$sql);
while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)){
    echo "Old Timestamp: {$row['Timestamp']}<br>";
}
//$old_time = strtotime($row['Timestamp']);
//$time1 = date('Gi.s', $RTCtimestamp);
//$time2 = date('Gi.s', $old_time);
list($date1, $time1) = explode('%20', date('d-m-Y%20Gi.s', $RTCtimestamp)); //Line 31
list($date2, $time2) = explode(' ', date('d-m-Y Gi.s', $row['Timestamp'])); //Line 32

我已经提到了代码 cmets 中出现以下错误的行号:

    Old Timestamp: 2020/02/02 12:3:24
    
    Notice: A non well formed numeric value encountered in C:\Apache24\htdocs\RFID\connect4.php on line 31
    
    Notice: Trying to access array offset on value of type null in C:\Apache24\htdocs\RFID\connect4.php on line 32
Minutes:-0.55666666666667

以下是发送到变量的内容: $RTCtimestamp = '2020/02/02%2012:3:24' (这个时间戳是我发送到表的时间戳。这里,“%20”是为空间而写的,因为它在浏览器搜索选项卡中的外观) $row['Timestamp'] = '2020/02/02 12:3:24'(这个时间戳是从MySQL表中读取的)

我也尝试过使用 strtotime 功能(注释区的代码中也提供了该功能) 但是,它给出了相同的两个错误。有没有办法解决这个问题?请帮我找出我在这里做错了什么。

【问题讨论】:

  • 如果$RTCtimestamp = '2020/02/02%2012:3:24' 不是时间戳,并且date() 要求参数2 是时间戳,您可能需要重新考虑
  • 请发var_dump($RTCtimestamp); 并告诉我们,谢谢
  • 据我了解,$row['Timestamp'] 不是时间戳,而是以某种格式表示日期的字符串。你能告诉我们那是什么格式吗?
  • 我没有看到您在代码中的任何位置也设置了 $RTCtimestamp,正如@RiggsFolly 建议的 var_dump($RTCtimestamp) 并向我们展示的那样。
  • @RiggsFolly,我尝试做var_dump($RTCtimestamp);,结果如下:string(18) "2020/02/02 12:3:24".var_dump($row['Timestamp']); 我收到此错误:Trying to access array offset on value of type null in C:\Apache24\htdocs\RFID\connect4.php on line 32 NULL

标签: php mysql time timestamp


【解决方案1】:

首先,你没有正确使用mysqli。请了解准备好的语句。

要从数据库中获取数据,您可以使用以下代码:

$stmt = $mysqli->prepare('SELECT Timestamp FROM recentdata Where TagID=?');
$stmt->bind_param('s', $tagID);
$stmt->execute();
$result = $stmt->get_result();

如果您只期望一个结果,则根本不需要循环。只得到一个没有循环的单行。

$recentdata = $result->fetch_assoc();
echo "Old Timestamp: {$recentdata['Timestamp']}<br>";

要从您的时间戳中获取时间,您需要将其转换为 PHP DateTime 对象。然后你可以使用format()方法只获取时间部分。

$dt = new DateTime($recentdata['Timestamp']);
echo "Time ". $dt->format('H:i:s'); // H = hours, i = minutes, s = seconds

您可以对从用户那里获得的数据执行相同的操作。确保时间戳遵循已知格式,或使用date_create_from_format() 并指定您自己的格式。

$RTC_dt = new DateTime($RTCtimestamp);
echo "Time ". $RTC_dt->format('H:i:s'); // H = hours, i = minutes, s = seconds

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    相关资源
    最近更新 更多