1

PHP を使用して、週番号を見つけるにはどうすればよいですか。

  • 週の最初の日は月曜日、
  • 第 1 週は、今年の最初の月曜日の週です。
  • 範囲は 1 ~ 53 ですか。

私はMySQLコードに相当するPHPを達成しようとしています:

SELECT WEEK(date('Y-m-d'), 7);

この Web サイトで見られるように: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

例(間違った言語、MySQLで達成しようとしていること):

$dbh = new PDO("mysql:host=localhost;dbname=test", "root", "");

$stmt = $dbh->prepare("SELECT WEEK('2012-12-30', 7) as week");
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
echo "2012-12-30 = ".$result['week']."<br />";

$stmt = $dbh->prepare("SELECT WEEK('2012-12-31', 7) as week");
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
echo "2012-12-31 = ".$result['week']."<br />";

$stmt = $dbh->prepare("SELECT WEEK('2013-01-01', 7) as week");
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
echo "2013-01-01 = ".$result['week']."<br />";

$stmt = $dbh->prepare("SELECT WEEK('2013-01-06', 7) as week");
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
echo "2013-01-06 = ".$result['week']."<br />";

$stmt = $dbh->prepare("SELECT WEEK('2013-01-07', 7) as week");
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
echo "2013-01-07 = ".$result['week']."<br />";

出力: (探している出力)

2012-12-30 = 52
2012-12-31 = 53
2013-01-01 = 53
2013-01-06 = 53
2013-01-017 = 1

私の試み: (正しい言語、PHP、しかし間違った結果)

$date = new DateTime('2012-12-30');
echo "2012-12-30 = ".$date->format('W')."<br />";
$date = new DateTime('2012-12-31');
echo "2012-12-31 = ".$date->format('W')."<br />";
$date = new DateTime('2013-01-01');
echo "2013-01-01 = ".$date->format('W')."<br />";
$date = new DateTime('2013-01-06');
echo "2013-01-06 = ".$date->format('W')."<br />";
$date = new DateTime('2013-01-07');
echo "2013-01-07 = ".$date->format('W')."<br />";

出力 (間違った結果)

2012-12-30 = 52
2012-12-31 = 01
2013-01-01 = 01
2013-01-06 = 01
2013-01-07 = 02

かなり基本的な何かが欠けているように感じます。これに関するヘルプは非常に高く評価され、事前に感謝します!

4

1 に答える 1

0

strftimeそしてstrtotimeあなたを助けるはずです。あなたの場合、このコードはあなたが望むことをするはずです:

strftime(%V, strtotime('2013-01-21'))

于 2013-01-21T16:57:04.940 に答える