我现在正在寻找几个小时的答案,但我找不到答案。
我正在编写简单的脚本。用户设置工作开始时间和结束时间。
这是我的代码:
$grand=0;
$query = "SELECT DISTINCT StartTime,EndTime FROM tblWeekSchedule WHERE FCode='101'";
$query = safe_query($query);
$gquery = gather_info_in_array($query);
foreach ($gquery as $z) {
$s = $z['StartTime'];
$e = $z['EndTime'];
$tutal = date_create($s)->diff(date_create($e))->format('%H:%I');
$grand+=$tutal;
}
echo $grand;
输出始终为整数示例10 ..我想让它像这个例子10:30
我是编程的新手.. ang愿意学习..提前谢谢
答案 0 :(得分:0)
转换为unix时间戳。
简单例如;
$n = time();
echo $n; // 1465977786, (when I ran it.
$t = date("Y-m-d H:i:s", $n);
echo $t; //2016-06-15 13:33:06
$x = 1465976585;
$t = date("Y-m-d H:i:s", $x);
echo $t; //2016-06-15 13:13:05
$t = $n - $x;
echo $t; //1201
两次1201秒的差异。现在简单的数学除以60来提取小时等等。
您将遇到的问题是日期的变化,即。午夜。比如说下午6点和凌晨2点。因此最好将CURRENT_TIMESTAMP保存到MySQL,这样就可以在一个字段中获得所有必要的信息。
从MySQL获取unix时间戳;
$sql = "SELECT DISTINCT UNIX_TIMESTAMP(
的StartTime ),UNIX_TIMESTAMP(
结束时间) FROM tblWeekSchedule WHERE FCode='101'";
答案 1 :(得分:0)
您的问题出在最后一行:$grand+=$tutal;
这一行在$grand
和$tutal
之间进行了数字加法。
但是,$tutal
不是数字 - 它是一个字符串。它看起来像10:30
,但如果你对它进行+=
,PHP会在添加之前将其转换为数字。此转换将产生数字10
,因为:
是非数字的,因此PHP会删除冒号后的所有内容以进行添加。
通过将它们添加到$grand
,您要尝试做什么并不完全清楚。你想加上小时数吗?
你说你正在尝试添加小时和分钟。
事实是你使用日期对象过于复杂。只需使用unix时间戳,即可轻松减去它们,而无需使用DateTime::diff()
等函数。
这是一个更好的解决方案:
foreach ($gquery as $z) {
$s = $z['StartTime']; //I assume that StartTime is a unix timestamp? if not, convert it to one on this line.
$e = $z['EndTime']; //I assume that EndTime is a unix timestamp? if not, convert it to one on this line.
$tutal = $e - $s; // unix timestamps are integers, so can be subtracted easily to get the time difference.
$grand += $tutal; // $grand will now be the total number of seconds of all your time differences.
}
$grand_minutes = floor($grand / 60); // get the number of minutes (ignore any left-over seconds.
$grand_hours = floor($grand_minutes / 60); // get the number of hours (ignore any left-over minutes)
$remainder_minutes = $grand_minutes % 60; // now we get the left-over minutes.
echo "Total time: {$grand_hours}:{$remainder_minutes}\n";
(假设$z['StartTime']
和$z['EndTime
']`是unix时间戳;如果不是,请在此代码之前将它们转换为时间戳格式)
答案 2 :(得分:0)
我创建了我的评论答案,以便更容易看出我的意思 这将以秒为单位计算所有内容,$ tutal和$ grand将是整数值,从而使计算更容易。
$grand=0;
$query = "SELECT DISTINCT StartTime,EndTime FROM tblWeekSchedule WHERE FCode='101'";
$query = safe_query($query);
$gquery = gather_info_in_array($query);
foreach ($gquery as $z) {
$s = $z['StartTime'];
$e = $z['EndTime'];
$tutal = strtotime($e)-strtotime($s);
$grand+=$tutal;
}
echo date("H:i", $grand);
希望它适合你。
答案 3 :(得分:0)
检查这个逻辑。
val myFilteredListWithDesiredOneItem = unfilteredList
.filter(x => x.getId.equals(something))
.VERIFY AMOUNT
.toList