Сколько недель внутри двух дат - PullRequest
3 голосов
/ 22 декабря 2009

У меня есть даты начала и окончания в моей базе данных (MySQL). Как я могу получить ответ, сколько недель (или дней) находятся внутри этих двух дат? (MySQL или PHP)

Например, у меня есть такая база данных:

Начато и | will_end
2009-12-17 | 2009-12-24
2009-12-12 | 2009-12-26
...

Обновление к вопросу:
Как использовать DATEDIFF? Как я могу заставить это работать? или я должен использовать DATEDIFF совершенно иначе?

SELECT DATEDIFF ('Started', 'will_end') AS 'Duration' FROM my_table WHERE id = '110';

Ответы [ 6 ]

2 голосов
/ 12 ноября 2012

Подсчет количества дней и деление на семь не даст вам количество недель между двумя датами. Вместо этого он вернет результат деления на 7, которое не всегда соответствует количеству недель между двумя датами, если рассматривать количество недель в расчете ISO.

Например, с учетом start_date = "2010-12-26" и end_date = "2011-01-25" вы пройдете через W51,52,01,02,03,04 и это 6 недель согласно ISO, но если вы просто рассчитаете разницу и поделите на 7 , вы получите 5.

Эта проблема возникает, когда даты начала и окончания относятся к разным годам.

Лучший способ сделать расчет - это получить номер последней недели start_date года, и он должен относиться к 28 декабря.

function weeks($ladate2,$ladate3) {
    $start_week= date("W",strtotime($ladate2));
    $end_week= date("W",strtotime($ladate3));
    $number_of_weeks= $end_week - $start_week;

    $weeks=array();
    $weeks[]=$start_week;
    $increment_date=$ladate2;
    $i="1";

    if ($number_of_weeks<0){
        $start_year=date("Y",strtotime($ladate2));
        $last_week_of_year= date("W",strtotime("$start_year-12-28"));
        $number_of_weeks=($last_week_of_year-$start_week)+$end_week;
    }

    while ($i<=$number_of_weeks)
    {
        $increment_date=date("Y-m-d", strtotime($ladate2. " +$i week"));
        $weeks[]=date("W",strtotime($increment_date));

        $i=$i+1;
    }

    return $weeks;
}

function diff_weeks($ladate2,$ladate3) {
    $weeks=weeks($ladate2,$ladate3);
    $diff_weeks=count($weeks);

    return $diff_weeks;
}

С наилучшими пожеланиями, Manikam

2 голосов
/ 22 декабря 2009

Если в двух столбцах $d1 и $d2 хранится метка времени Unix, полученная из time(), то достаточно этой простой строки:

$diffweek = abs($d1 - $d2) / 604800; 

В противном случае, если столбцы имеют тип DATETIME, тогда:

$diffweek = abs(strtotime($d1) - strtotime($d2)) / 604800; 

p / s: 604800 - количество секунд в неделе (60 * 60 * 24 * 7)

p / s2: вы можете захотеть intval($diffweek) или round($diffweek)

1 голос
/ 22 декабря 2009

Вы можете использовать функцию TO_DAYS для каждой даты и вычитать их, чтобы вычислить разницу в днях.

1 голос
/ 22 декабря 2009

MySQL имеет datediff , который возвращает разницу в днях между двумя датами, начиная с MySQL 4.1.1.

Обратите внимание, что согласно руководству DATEDIFF(expr1,expr2) возвращает expr1 – expr2, выраженное в виде значений в днях от одной даты к другой. expr1 и expr2 являются выражениями даты или даты и времени. В расчете используются только части даты значений .

0 голосов
/ 22 декабря 2009
<?php
  $dayDif    = date('z',strtotime('2009-12-17)') - date('z',strtotime('2009-12-24)');
  $numWeeks  = $dayDif / 7;
?>

Опция z для функции даты в php дает вам день года (0 - 365). Вычитая два значения, вы узнаете, сколько дней между датами. Затем коэффициент на семь для количества недель.

Внимательно прочитайте эту страницу, функция date () богата. http://php.net/manual/en/function.date.php

0 голосов
/ 22 декабря 2009

DATEDIFF

Найдите дни и разделите на 7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...