如何根据给定的年数生成每周的日期

时间:2016-01-04 12:40:20

标签: php mysql date

这里我试图将日期和结束日期值开始到数据库。

这里我调用这个创建共享日期函数来向数据库添加值。 当我打电话给这个功能 函数1st获取$sharing值。 $sharing值将为“1 week”或“2 week”或“3 week”...

$from_date将包含日期值。 $product_life的值为1 year2 year ...

我想在迭代中将值添加到数据库中..说。

我有一个$product_life = 1 year,我有一个from_date = 2016-02-23sharing_basis= 1 week

当我使用上述值调用createSharingdates($productId)时,它会通过order_datetime获取该产品的用户,然后为每个用户添加共享日期。但在这里,我只能生成共享日期一个周期。

For.ex如果有4个用户,我只能为4个用户生成一次日期。 喜欢

user_id: 1
product_id: 24
start_date: 2015-02-02  
end_date: 2015-02-09

user_id: 2
product_id: 24
start_date: 2015-02-10  
end_date: 2015-02-17

user_id: 3
product_id: 24
start_date: 2015-02-18  
end_date: 2015-03-26

user_id: 4
product_id: 24
start_date: 2015-02-27  
end_date: 2015-03-05

我想要做的是想要生成共享日期,直到product_life结束

例如: 如果产品寿命为product_life一年,我想在sharing_basis上生成该1年的日期。所以输出就像..

输出:

user_id: 1
product_id: 24
start_date: 2015-02-02  
end_date: 2015-02-09

user_id: 2
product_id: 24
start_date: 2015-02-10  
end_date: 2015-02-17

user_id: 3
product_id: 24
start_date: 2015-02-18  
end_date: 2015-02-26

user_id: 4
product_id: 24
start_date: 2015-02-27  
end_date: 2015-03-05


user_id: 1
product_id: 24
start_date: 2015-03-06  
end_date: 2015-03-13

user_id: 2
product_id: 24
start_date: 2015-03-14  
end_date: 2015-03-21

user_id: 3
product_id: 24
start_date: 2015-03-28  
end_date: 2015-03-35

user_id: 4
product_id: 24
start_date: 2015-03-42  
end_date: 2015-03-49
... continues

代码:

function createSharingdates($productId){
    $sharing_basis = getSharingBasis($productId); 
    $product_life = getlife($productId); 
    $from_date = getStartdate($productId);
    $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 
    $sql = "SELECT user_id FROM orders WHERE product_id='$productId' ORDER BY order_datetime";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {                                
        $product_id = $productId;       
        while($row = $result->fetch_assoc()) {              
            $user_id = $row["user_id"];
            $to_date = date('Y-m-d', strtotime('+'.$sharing_basis, strtotime($from_date)));         
            addSharingDates($product_id,$user_id,$from_date,$to_date);
            $from_date = $to_date;
    }
    $conn->close();
    }
}

1 个答案:

答案 0 :(得分:0)

Starting with a similar link用户想要在给定范围内的所有可能日期,但没有固定的日期表。您可以在查询中动态生成一个表,然后将其用作其余查询/用户的基础...例如,从2015-02-02开始获得52周......您显然可以更改任何开始根据需要,日期是,并根据LIMIT记录(26周,52周,104周等)的数量来限制结束。

select
      @curDate := Date_Add(@curDate, interval 1 day) as WeekStart,
      Date_Add( @curDate, interval 7 day ) as WeekEnd
   from
      ( select @curDate := '2015-02-02' ) sqlvars,
      AnyOtherTable
   limit 52 ) AllWeeksYouNeed

现在,您希望获得购买给定产品的所有用户的交易,只需加入两个结果。

SELECT 
      o.user_id,
      o.Product_ID,
      AllWeeksYouNeed.WeekStart,
      AllWeeksYouNeed.WeekEnd
   FROM 
      orders o
         JOIN ( above entire query ) AllWeeksYouNeed
   WHERE 
      o.product_id='$productId' 
   ORDER BY 
      o.order_datetime

这将产生一个笛卡尔结果,我认为这不是你想要的......但是根据你可以调整的持续时间(1年,2年,无论如何),它会给你每人每周一条记录。

现在,SHARING组件有点奇怪......这可以基于第一个查询中的旋转分配来完成。但是,我不想在不了解“分享”的目的的情况下将此与您混淆。它几乎看起来像某种旋转队列。