Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将一个月的某一天与一周的某一天和某一年联系起来的问题_Php_Date_Datetime - Fatal编程技术网

Php 将一个月的某一天与一周的某一天和某一年联系起来的问题

Php 将一个月的某一天与一周的某一天和某一年联系起来的问题,php,date,datetime,Php,Date,Datetime,我正在尝试使用以下代码获取一个月中的某一天: // your input $month = "September"; $year = "2013"; $dayWeek = "Friday"; $week = 2; // create a date object $date = new DateTime(); // set to the first day of the specified year/month $date->modify($yea

我正在尝试使用以下代码获取一个月中的某一天:

// your input
$month      = "September";
$year       = "2013";
$dayWeek    = "Friday";
$week       = 2;

// create a date object
$date = new DateTime();

// set to the first day of the specified year/month
$date->modify($year . '-' . $month . '-01');

// add $week -1 weeks to the date
$date->modify('+' . ($week - 1) . ' week');

// set to day of week
$date->modify($dayWeek);

// here's the day of month for you
echo $date->format('j');
但是这个代码不起作用,为什么不呢

因为如果我有这些数据:

$month      = "December";
$year       = "2019";
$dayWeek    = "saturday";
$week       = 2;
它应该返回07,因为如果我们查看2019年12月的日历。。。第一周只是星期天,但它返回14,我想知道为什么??如果12月14日是第三周

我想知道或得到一个代码,它给了我一个月的一天。。。只给$month、$year、dayWeek和week of the month。

指定日期时,请引用:

移动到此名称的第二天

所以,

$date->modify($year . '-' . $month . '-01');
给你2019年12月1日,也就是周日

$date->modify('+' . ($week - 1) . ' week');
添加1周,即现在的日期12月8日,星期日

寻找下一个星期六,即12月14日,这正是本月的第二个星期六

这可能会解决你的问题

<?php
// your input
$month      = "December";
$year       = "2019";
$dayWeek    = "saturday";
$week       = 2;


// create a date object
$date = new DateTime();

$date->modify($year . '-' . $month . '-01');

$date->modify('sunday');  // Put here 'saturday' if your week ends with saturday and starts with sunday

$end_of_the_first_week = $date->format('j');

// Start over again
$date->modify($year . '-' . $month . '-01');

$date->modify($dayWeek);

if ($date->format('j') > $end_of_the_first_week) { // we already in the second week
  if ($week > 2) { 
    // add $week -2 weeks to the date
    $date->modify('+' . ($week - 2) . ' week');
  }
} else if ($week > 1) {
    // add $week -1 weeks to the date
    $date->modify('+' . ($week - 1) . ' week');
}

echo $date->format('j'); // 7 

为什么你认为从周日到周六是
-1
,而不是
+6
?@JesúsCova应该是这样。试着测试一下。
<?php
// your input
$month      = "December";
$year       = "2019";
$dayWeek    = "saturday";
$week       = 2;


// create a date object
$date = new DateTime();

$date->modify($year . '-' . $month . '-01');

$date->modify('sunday');  // Put here 'saturday' if your week ends with saturday and starts with sunday

$end_of_the_first_week = $date->format('j');

// Start over again
$date->modify($year . '-' . $month . '-01');

$date->modify($dayWeek);

if ($date->format('j') > $end_of_the_first_week) { // we already in the second week
  if ($week > 2) { 
    // add $week -2 weeks to the date
    $date->modify('+' . ($week - 2) . ' week');
  }
} else if ($week > 1) {
    // add $week -1 weeks to the date
    $date->modify('+' . ($week - 1) . ' week');
}

echo $date->format('j'); // 7