Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 确定星期一和星期五代码停止工作_Php_Mysql_Date - Fatal编程技术网

Php 确定星期一和星期五代码停止工作

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

我在数据库中有一些条目,我想按它们发生的那一周对它们进行分组。我要做的是确定条目发生的一年中的哪一周,然后显示该周以及该周的周一和周五。此页面显示我获得的输出。请注意,周一和周五对于2017年发生的事件是正确的,但对于2018年发生的事件则不正确。代码如下。我错过了什么

<?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]
)<代码>-
不重要。请在线发布您的代码,这样我们就不需要单击链接。谢谢您的帮助。我是新手,所以我向你学习!请在线发布您的代码,这样我们就不需要单击链接。谢谢您的帮助。我是新手,所以我向你学习!