Php 确定星期一和星期五代码停止工作
我在数据库中有一些条目,我想按它们发生的那一周对它们进行分组。我要做的是确定条目发生的一年中的哪一周,然后显示该周以及该周的周一和周五。此页面显示我获得的输出。请注意,周一和周五对于2017年发生的事件是正确的,但对于2018年发生的事件则不正确。代码如下。我错过了什么Php 确定星期一和星期五代码停止工作,php,mysql,date,Php,Mysql,Date,我在数据库中有一些条目,我想按它们发生的那一周对它们进行分组。我要做的是确定条目发生的一年中的哪一周,然后显示该周以及该周的周一和周五。此页面显示我获得的输出。请注意,周一和周五对于2017年发生的事件是正确的,但对于2018年发生的事件则不正确。代码如下。我错过了什么 <?php //Gets list of weeks that I can bill try { $stmt2 = $db->prepare("SELECT DISTINCT YEAR(tra
<?php //Gets list of weeks that I can bill
try {
$stmt2 = $db->prepare("SELECT DISTINCT YEAR(transaction_date) AS YR, WEEK(bo_hourly_charges.transaction_date) as wk FROM bo_hourly_charges WHERE billed_by='AfterCare' ORDER BY transaction_date DESC");
$stmt2->execute();
// set the resulting array to associative
$result2 = $stmt2->setFetchMode(PDO::FETCH_ASSOC);
$count = $stmt2->rowCount();
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
<div align='center'>
<br>
<?php
foreach (($stmt2) as $row) {
$fix = $row['YR']."W".$row['wk'];
$monday=date('M d',strtotime($fix));
$friday=date('M d',strtotime($fix.'5'));
print $fix." ".$row['wk']." ".$monday."-".$friday."<br>";
++$i;
}
?>
有趣的问题,我不知道PHP允许这种格式。我不相信这是记录在案的行为。因此,依赖它可能是不明智的
很快表明问题与2018年无关:
<?php
$dates = [];
for ($i = 1; $i <= 52; $i++) {
$dates[] = ['YR' => 2017, 'wk' => $i];
}
foreach ($dates as $row) {
$fix = $row['YR']."W".$row['wk'];
$monday=date('M d',strtotime($fix));
$friday=date('M d',strtotime($fix.'5'));
print $fix." ".$row['wk']." ".$monday."-".$friday."\n";
++$i;
}
相反,2017年前九周似乎也有类似的问题。从第10周开始,问题似乎得到了解决
第1周至第9周与第10周及以上之间的差异与格式密切相关
似乎可以解决问题:
<?php
$dates = [];
for ($i = 1; $i <= 52; $i++) {
$dates[] = ['YR' => 2017, 'wk' => $i];
}
foreach ($dates as $row) {
$fix = $row['YR']."W".str_pad($row['wk'], 2, '0', STR_PAD_LEFT);
$monday=date('M d',strtotime($fix));
$friday=date('M d',strtotime($fix.'5'));
print $fix." ".$row['wk']." ".$monday."-".$friday."\n";
++$i;
}
有趣的问题,我不知道PHP允许这种格式。我不相信这是记录在案的行为。因此,依赖它可能是不明智的
很快表明问题与2018年无关:
<?php
$dates = [];
for ($i = 1; $i <= 52; $i++) {
$dates[] = ['YR' => 2017, 'wk' => $i];
}
foreach ($dates as $row) {
$fix = $row['YR']."W".$row['wk'];
$monday=date('M d',strtotime($fix));
$friday=date('M d',strtotime($fix.'5'));
print $fix." ".$row['wk']." ".$monday."-".$friday."\n";
++$i;
}
相反,2017年前九周似乎也有类似的问题。从第10周开始,问题似乎得到了解决
第1周至第9周与第10周及以上之间的差异与格式密切相关
似乎可以解决问题:
<?php
$dates = [];
for ($i = 1; $i <= 52; $i++) {
$dates[] = ['YR' => 2017, 'wk' => $i];
}
foreach ($dates as $row) {
$fix = $row['YR']."W".str_pad($row['wk'], 2, '0', STR_PAD_LEFT);
$monday=date('M d',strtotime($fix));
$friday=date('M d',strtotime($fix.'5'));
print $fix." ".$row['wk']." ".$monday."-".$friday."\n";
++$i;
}
根据,ISO年与ISO周和日期的正确复合日期定义如下:
YY "-"? "W" W "-"? [0-7]
其中,破折号(-
)是可选的(这是紧跟在破折号后面的问号?
的意思)。因此,您的格式没有任何错误。。。但您的代码会发生什么情况,例如,2018W4
(2018年第4周)变为2018-W45
(2018年第45周),一切都变得一团糟。为了避免模棱两可的格式,请确保您的周数始终包含两位数(从01
到53
):
$fix = $row['YR'].'W'.sprintf('%02d',$row['wk']);
另一方面,如果要使用准备好的SQL语句,应该避免在查询中手动插入参数。否则,您将使这种方法的主要目的之一徒劳:安全
$stmt2 = $db->prepare("SELECT DISTINCT YEAR(transaction_date) AS YR, WEEK(bo_hourly_charges.transaction_date) as wk FROM bo_hourly_charges WHERE billed_by=? ORDER BY transaction_date DESC");
$stmt2->bind_param('s','AfterCare');
根据,ISO年与ISO周和日的正确复合日期定义如下:
YY "-"? "W" W "-"? [0-7]
其中,破折号(-
)是可选的(这是紧跟在破折号后面的问号?
的意思)。因此,您的格式没有任何错误。。。但您的代码会发生什么情况,例如,2018W4
(2018年第4周)变为2018-W45
(2018年第45周),一切都变得一团糟。为了避免模棱两可的格式,请确保您的周数始终包含两位数(从01
到53
):
$fix = $row['YR'].'W'.sprintf('%02d',$row['wk']);
另一方面,如果要使用准备好的SQL语句,应该避免在查询中手动插入参数。否则,您将使这种方法的主要目的之一徒劳:安全
$stmt2 = $db->prepare("SELECT DISTINCT YEAR(transaction_date) AS YR, WEEK(bo_hourly_charges.transaction_date) as wk FROM bo_hourly_charges WHERE billed_by=? ORDER BY transaction_date DESC");
$stmt2->bind_param('s','AfterCare');
也许是strotime($fix)
,因为我无法在这里提交任何对yyyyWnn格式的引用:但这只是一个猜测。哦,住手,我找到了!:-)它是一种复合格式。我们建议在周五5号之前使用破折号,也许是这样吧?当它必须是15和1-5时,我可能无法区分15和15。显然我不知道。。。很抱歉。可能是因为strotime($fix)
,因为我无法在这里提交任何对yyyyWnn格式的引用:但这只是一个猜测。哦,住手,我找到了!:-)它是一种复合格式。我们建议在周五5号之前使用破折号,也许是这样吧?当它必须是15和1-5时,我可能无法区分15和15。显然我不知道。。。抱歉。问题只是W
始终必须是两位数字(“0”[1-9]|[1-4][0-9]|“5”[0-3]
)<代码>-
无关紧要。问题只是W
始终必须是两位数(“0”[1-9]|[1-4][0-9]|“5”[0-3]
)<代码>-
不重要。请在线发布您的代码,这样我们就不需要单击链接。谢谢您的帮助。我是新手,所以我向你学习!请在线发布您的代码,这样我们就不需要单击链接。谢谢您的帮助。我是新手,所以我向你学习!