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++;
}
希望对您有所帮助。
如果我为 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++;
}
希望对您有所帮助。