1

以下の形式で月を持っています

2012-01
2012-02
2012-03
2012-04
2012-05
2012-06

月は varchar に保存されます (私は月だけを保存したかったのです)。現在の Ym とデータベースの月を減算して月を返す方法を教えてください。

Eg: (2012-11) - (2012-06) = 5
4

3 に答える 3

2

月だけが必要な場合は、数値になります...なぜvarcharを使用するのですか? int の方が適しています。

しかし、これは varchar であるため、見苦しい数学ではなく、文字列演算を使用してください。

month = RIGHT(yourvalue, 2)

例... 2012-11->11

于 2012-11-14T14:35:55.940 に答える
2

日付計算のソリューションは既に存在すると思います。しかし、単純なタスクの場合、これはやり過ぎかもしれません。

月単位の結果のみが必要な場合は、日付を月単位でのみ変換することをお勧めします。

$year   = substr($string,  0, 4);   // first four digits
$month  = substr($string, -2);      // last two digits
$months = $year * 12 + $month;

次に、2 つの日付を簡単に差し引くことができ、結果は月単位のオフセットになります。

$offset = $months1 - $months2;

あなたの例では、これは次のように計算されます。

$string1 = "2012-11";
$string2 = "2012-06";
$year1   = substr($string1,  0, 4); // 2012
$year2   = substr($string2,  0, 4); // 2012
$month1  = substr($string1, -2);    // 11
$month2  = substr($string2, -2);    // 06
$months1 = $year1 * 12 + $month1;   // 24155
$months2 = $year2 * 12 + $month2;   // 24150
$offset  = $months1 - $months2;     // 5

これは、タスクを実行する単純な php 関数です。

function months($string)
{
    if(strlen($string) < 6) return; // just to be sure
    return substr($string, 0, 4) * 12 + substr($string, -2);
}

function offset($minuend, $subtrahend)
{
    return months($minuend) - months($subtrahend);
}

echo offset("2012-11", "2012-06");  // output "5"
于 2012-11-14T14:36:10.140 に答える
1
<?php

function getMonthCount($date) {
    $parts = explode('-', $date);
    return ($parts[0] * 12) + $parts[1];
}

$first  = '2012-11';
$second = '2012-06';
echo getMonthCount($first) - getMonthCount($second);
于 2012-11-14T14:41:18.300 に答える