以下の形式で月を持っています
2012-01
2012-02
2012-03
2012-04
2012-05
2012-06
月は varchar に保存されます (私は月だけを保存したかったのです)。現在の Ym とデータベースの月を減算して月を返す方法を教えてください。
Eg: (2012-11) - (2012-06) = 5
月だけが必要な場合は、数値になります...なぜvarcharを使用するのですか? int の方が適しています。
しかし、これは varchar であるため、見苦しい数学ではなく、文字列演算を使用してください。
month = RIGHT(yourvalue, 2)
例... 2012-11
->11
日付計算のソリューションは既に存在すると思います。しかし、単純なタスクの場合、これはやり過ぎかもしれません。
月単位の結果のみが必要な場合は、日付を月単位でのみ変換することをお勧めします。
$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"
<?php
function getMonthCount($date) {
$parts = explode('-', $date);
return ($parts[0] * 12) + $parts[1];
}
$first = '2012-11';
$second = '2012-06';
echo getMonthCount($first) - getMonthCount($second);