5

私は2つの日付を持っています

開始日時 = 2013-08-28 17:43:41AND 終了日時 =2013-08-28 22:23:51

2013-08-28 17:45:00ここで、この場合のように開始時刻を上位レベルの 15 分間隔に変換したいのですが、終了時刻も同様に下位レベルの 15 分間隔に変換します2013-08-28 22:15:00

その後、その時間の差の15分間隔の配列が必要です。

例えば。私たちの場合、それは

[0] = 2013-08-28 17:45:00
[0] = 2013-08-28 18:00:00
[1] = 2013-08-28 18:15:00
[2] = 2013-08-28 18:30:00
[3] = 2013-08-28 18:45:00
[4] = 2013-08-28 19:00:00
......同じく

これは mySql/php を使用して行いたいのですが、データベースからデータが取得されたため、mysql が優先されます。

4

3 に答える 3

2

次のシグネチャを使用して、カスタムの MySQL 関数とプロシージャを作成できます。

  1. CREATE FUNCTION ToUpper15 (dateParam DATETIME)
  2. CREATE FUNCTION ToLower15 (dateParam DATETIME)
  3. CREATE PROCEDURE AddIntervalMinutes (開始日 DATETIME、終了日 DATETIME、間隔 INT)

これは疑似MySQL コードの例です。私は MySQL をプログラミングしたことがありません。ドキュメントを探してみましたが、ひどいものでした。それ以外の場合は、言語の構文のドキュメントを見つけることができれば、これは実際には 30 分のタスクです。

覚えておいてください

  • 45 分を超えて切り上げると、次の時間に丸められます
  • ToLower15 で同じことを行います
  • システム関数 AddTime() を使用して 15 分間隔を実行します

以下は、これを行う方法です

CREATE FUNCTION ToUpper15(dateParam DATETIME) 
RETURNS DATETIME
DETERMINISTIC
BEGIN
   DECLARE dateYear   INT;
   DECLARE dateMonth  INT;
   DECLARE dateDay    INT;
   DECLARE dateHour   INT;
   DECLARE dateMinute INT;

   SET dateYear   = YEAR(dateParam);
   SET dateMonth  = MONTH(dateParam);
   SET dateDay    = DAY(dateParam);
   SET dateHour   = HOUR(dateParam);
   SET dateMinute = MINUTE(dateParam);

   IF (dateMinute >= 0 AND dateMinute < 15) THEN
      SET dateMinute = 15;
   ELSEIF (dateMinute >= 15  AND dateMinute < 30) THEN
      SET dateMinute = 30;
   ELSEIF (dateMinute >= 30  AND dateMinute < 45) THEN
      SET dateMinute = 45;
   ELSEIF (dateMinute >= 45  AND dateMinute < 60) THEN
      BEGIN
         SET dateMinute = 0;
         SET dateHour = dateHour + 1;
      END
   END IF;

   RETURN CONCAT(dateYear, '-', dateMonth, '-', dateDay, ' ', dateHour, ':', 'dateMinute');
END 
于 2014-02-01T19:17:59.967 に答える