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