Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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_Datetime_Calendar - Fatal编程技术网

Php 每周日历记录

Php 每周日历记录,php,mysql,datetime,calendar,Php,Mysql,Datetime,Calendar,我希望每周从存储了datetime字段的表中获取记录。 一个mysql查询,可以识别周数和周开始日期和结束日期 如链接中所示 如何通过mysql查询获得该记录,包括周号、该周的开始和结束日期以及该周开始和结束日期之间的记录。不适用于当前或单个星期。我需要在数据库表中记录所有过去几周的datetime值。。 即 了解如何获取周数,然后使用以下语句获取日期之间的mysql数据: $sql = "SELECT * FROM stock WHERE dateColumnName BETWEEN '{$

我希望每周从存储了datetime字段的表中获取记录。 一个mysql查询,可以识别周数周开始日期结束日期

如链接中所示

如何通过mysql查询获得该记录,包括周号、该周的开始和结束日期以及该周开始和结束日期之间的记录。不适用于当前或单个星期。我需要在数据库表中记录所有过去几周的datetime值。。 即


了解如何获取周数,然后使用以下语句获取日期之间的mysql数据:

$sql = "SELECT * FROM stock WHERE dateColumnName BETWEEN '{$startDate}' AND '{$endDate}'"; 
确保日期的格式为“Y-m-d”

更新:

以下是适用于我的完整代码:

<?php 
function getStartAndEndDate($week, $year) {
  $dto = new DateTime();
  $dto->setISODate($year, $week);
  $ret['week_start'] = $dto->format('Y-m-d');
  $dto->modify('+6 days');
  $ret['week_end'] = $dto->format('Y-m-d');
  return $ret;
} ?>
    <table>
        <tr>
            <th>Week Number</th>
            <th>From Date</th>
            <th>To Date</th>
        </tr>
<?php 
for($i=1; $i<=52; $i++){
    $week_array = getStartAndEndDate($i,2017);
    $sql = "SELECT * FROM stock WHERE on_date BETWEEN '{$week_array['week_start']}' AND '{$week_array['week_end']}'";
    $result = mysqli_query($con,$sql);
    $item = mysqli_fetch_assoc($result);
    echo "<tr>
            <td>Week $i </td>
            <td>".$week_array['week_start']."</td>
            <td>".$week_array['week_end']."</td>
            <td>".$item['id']."</td>
        </tr>"; 
} ?>

</table>

周数
从日期开始
迄今为止

让我们看看,您的数据库中有
主表
,其中包含一些数据。例如:

CREATE TABLE `main_table` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Date` date NOT NULL,
  `Description` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT main_table 
    (`Date`, Description) 
VALUES 
    ('2017-01-02','The first record'),
    ('2017-01-05','The second record'),
    ('2017-01-11','The third record'),
    ('2017-01-17','The fourth record');
创建一个用户定义的函数,该函数返回与指定日期相同的一周中特定日期的日期。使用语法:

如果一周从周一开始,那么周一使用
1
,周日使用
7
。如果您的一周从星期天开始,那么周日使用
0
,周六使用
6
。例如,我的一周从星期一开始,我想知道最后一个星期三的日期

SELECT GET_DAY_OF_WEEK('2017-06-03', 3);
返回
'2017-05-31'

因此,要每周获取
main_table
的记录,可以使用以下MySQL查询:

SELECT 
    ID, 
    WEEKOFYEAR(`Date`) AS WeekNum,
    GET_DAY_OF_WEEK(`Date`, 1) AS WeekStarted,
    GET_DAY_OF_WEEK(`Date`, 7) AS WeekFinished,
    Description
FROM main_table;
查询结果将是

ID  WeekNum WeekStarted WeekFinished    Description
1   1       2017-01-02  2017-01-08      'The first record'
2   1       2017-01-02  2017-01-08      'The second record'
3   2       2017-01-09  2017-01-15      'The third record'
4   3       2017-01-16  2017-01-22      'The fourth record'

首先,您需要决定是使用mysql还是sql server。它们不是一回事。然后你需要发布足够的信息,这样别人就不会猜到你想要什么。表定义、样本数据和基于样本数据的所需输出。还要注意,我们的周数与其他地区(例如欧洲)的周数不同。请给出输入参数值和预期结果的示例。是否要获取一周中第一天和最后一天的日期,这是由年和周数指定的吗?或者你是说数据库中有一个带有时间戳记录的表,你想得到每个记录的周数、第一周和最后一周的日期吗?抱歉@Alexander我不懂你的英语。但您在执行此操作之前是否尝试过代码?在
for
循环中向MySQL服务器发送请求不是一个好主意。对不起,我的英语不好阅读有关参数化查询我认为这是最糟糕的,因为LoopLoopLooks great@Alexander。让我试试,它会把你更新回来的。@Googler,你试过解决方案了吗?还有问题吗?伙计还没有。还有一个问题。我明天一开始就会给你更新。现在有点忙。一定会赶上你的。需要你更多的帮助。ThanksHow我可以根据上述记录对日期进行编号吗。就像我希望所有属于周一的记录都是1,周二是2,周三是3等等。。我有一个datetime字段用作筛选记录的基础。@Googler,使用方法或。
SELECT 
    ID, 
    WEEKOFYEAR(`Date`) AS WeekNum,
    GET_DAY_OF_WEEK(`Date`, 1) AS WeekStarted,
    GET_DAY_OF_WEEK(`Date`, 7) AS WeekFinished,
    Description
FROM main_table;
ID  WeekNum WeekStarted WeekFinished    Description
1   1       2017-01-02  2017-01-08      'The first record'
2   1       2017-01-02  2017-01-08      'The second record'
3   2       2017-01-09  2017-01-15      'The third record'
4   3       2017-01-16  2017-01-22      'The fourth record'