strtotime 将 false 结果返回给数组中的字符串

strtotime gives back false result to strings in an array

如果我为 strtotime 定义一个字符串数组,它工作正常,但如果我从 sql 查询相同的字符串数组,它不会显示任何内容,这意味着结果是错误的。

这是工作正常的代码:

$belep=array('5:19:28','9:20:03','12:01:43','15:55:55');
for($i=0;$i<count($belep);$i++){
    $belep[$i]=strtotime($belep[$i]);
    echo $belep[$i].'<br>';
}
$sum=0;
for($j=1;$j<count($belep);$j+=2){
    $sum=$sum+($belep[$j]-$belep[$j-1]);
}
echo "Munkában töltött idő: ".gmdate("H:i:s", $sum);

这就是我得到错误结果的地方:

$belep=array();
$stmt3 = sqlsrv_query( $conn, $sql4 );
if( $stmt3 === false) {
    die( print_r( sqlsrv_errors(), true) );
}
$c=0;
while($row3=sqlsrv_fetch_array( $stmt3, SQLSRV_FETCH_ASSOC)){
    $variablename='idopont'.$c;
    $$variablename= $row3['TIMEPART']."<br>";
    echo $variablename.'<br>';
    echo $$variablename.'<br>';
    $belep[$c]=$$variablename;
    $c++;
}

for($i=0;$i<count($belep);$i++){
    $belep[$i]=strtotime($belep[$i]);
    echo $belep[$i].'<br>';
}
$sum=0;
for($j=1;$j<count($belep);$j+=2){
    $sum=$sum+($belep[$j]-$belep[$j-1]);
}
echo "Munkában töltött idő: ".gmdate("H:i:s", $sum);
sqlsrv_free_stmt( $stmt3);

如果我在第二个示例中回显数组,我将得到与第一个示例中相同的字符串结果。 如果我检查数组元素的类型,结果是字符串。 那么为什么 strtotime 对它们不起作用?

在你的代码中我看到了

while($row3=sqlsrv_fetch_array( $stmt3, SQLSRV_FETCH_ASSOC)){
  $variablename='idopont'.$c;
  $$variablename= $row3['TIMEPART']."<br>"; // Specially this one
  echo $variablename.'<br>';
  echo $$variablename.'<br>';
  $belep[$c]=$$variablename; // And this one
  $c++;
}

如果您看到我突出显示的 2 行,则您正在将 <br> 附加到从数据库中提取的日期(假设这是数据库上的日期)。因此,假设您有 2019-08-17,现在将是 2019-08-17<br>,这不是有效日期。 我会做的(保持相同的代码结构)是:

while($row3=sqlsrv_fetch_array( $stmt3, SQLSRV_FETCH_ASSOC)){
  $variablename='idopont'.$c;
  $$variablename= $row3['TIMEPART']; // I removed <br> from here
  echo $variablename.'<br/>';
  echo $$variablename.'<br/><br/>';
  $belep[$c]=$$variablename;
  $c++;
}

希望对您有所帮助。