0

月を数字から名前に変換する簡単な関数があります。つまり、10から10月

function convertToName($month) {  
    $month = date('F', mktime(0, 0, 0, $month));

    return $month;
}

これは問題なく機能していましたが、時計が 1 時間戻ったようです。私は今、間違った名前を取り戻しています。

date_default_timezone_set でタイムゾーンを定義しようとしましたが、まだ何もありません。

奇妙なことに、関数 10 を渡すと 10 月が返されますが、11 または 12 を渡すと 12 月が返され、1、1 月、2 および 3 を渡すと 3 月が返されます。

かなり簡単な修正が必要だと思いますが、どこにも答えが見つからないようです。

どんな助けでも大歓迎です、

ありがとう。

4

3 に答える 3

1

日と年の部分に有効な値を指定するだけで、正しい結果が得られます。

<?php

function convertToName($month) {  
    $month = date('F', mktime(0, 0, 0, $month, 10, 2010));

    return $month;
}

echo "1: " . convertToName(1) . "<br />";
echo "2: " . convertToName(2) . "<br />";
echo "3: " . convertToName(3) . "<br />";
echo "4: " . convertToName(4) . "<br />";
echo "5: " . convertToName(5) . "<br />";
echo "6: " . convertToName(6) . "<br />";
echo "7: " . convertToName(7) . "<br />";
echo "8: " . convertToName(8) . "<br />";
echo "9: " . convertToName(9) . "<br />";
echo "10: " . convertToName(10) . "<br />";
echo "11: " . convertToName(11) . "<br />";
echo "12: " . convertToName(12) . "<br />";

次の結果が生成されます。

1: January
2: February
3: March
4: April
5: May
6: June
7: July
8: August
9: September
10: October
11: November
12: December
于 2011-10-31T12:59:13.027 に答える
1

1日を渡してみてください... php.netは、月の0日は実際には前月の最後の日であると言います

于 2011-10-31T12:52:05.267 に答える
0

@OptimusCrime が指摘しているように、これは月を見つけるかなり複雑な方法です。

検討します

/** @desc Converts a month number (1-12) to a name
    @return mixed the month name on success; false on failure 
*/

function convertToName($month) {  

    $months = array ("January", "February", ....); // you get the drift
    return (array_key_exists($month, $months) ? $months["month"] : false);

}

明らかに、これはdate("F")潜在的に提供できる組み込みの国際化を取り除きますが、個人的にはどちらの方法でもこれを自分で制御するのが好きです-サーバーに特定のロケールがインストールされていることを信頼できないことがよくあります。

于 2011-10-31T13:26:34.123 に答える