Я хотел бы поместить каждую вторую среду в массив, используя php - PullRequest
0 голосов
/ 05 февраля 2020

Моя проблема:

Я нашел способ выбрать каждую другую среду здесь: PHP Выберите каждую другую среду с помощью следующего кода.

<?php 

$number_of_dates = 10;

$start_date = new DateTime("1/1/20");
$interval   = DateInterval::createFromDateString("second wednesday");
$period     = new DatePeriod($start_date, $interval, $number_of_dates - 1);

foreach ($period as $date) {
    $datex = $date->format("m-d-Y").PHP_EOL;
    echo "$datex<br>";
}
?>

То, что мне нужно сделать, это поместить каждую вторую среду в массив.

Я могу поместить диапазон дат в массив, но он использует каждый день в диапазоне с помощью следующего кода. Мне просто нужно, чтобы это было каждую вторую среду. Как я могу это сделать?

<?PHP
$dates = array();
$datetime1 = new DateTime("2020-01-01");
$datetime2 = new DateTime("2020-1-31");
$interval = $datetime1->diff($datetime2);
$days = (int) $interval->format('%R%a');
$currentTimestamp = $datetime1->getTimestamp();
$dates[] = date("m/d/Y", $currentTimestamp);
for ($x = 0; $x < $days; $x++)
{
   $currentTimestamp = strtotime("+1 day", $currentTimestamp);
    $dates[] = date("m/d/Y", $currentTimestamp);
}
print_r($dates);
?>

Ответы [ 3 ]

2 голосов
/ 05 февраля 2020

Попробуйте:

<?php
$dates = array();
$datetime = new DateTime();

for ($i = 0; $i < 52; $i++) {
    $datetime->modify('next Wednesday');
    array_push($dates, $datetime->format('m/d/Y'));
}

print_r($dates);

Что он делает?

  1. получает текущее время (вы можете настроить его в новом Datetime),
  2. затем зацикливается на 52 раза (вы также можете настроить это в for для l oop),
  3. затем находит следующую среду, используя modify.

Live Demo: http://sandbox.onlinephpfunctions.com/code/57c6a6b682a07f75bc1c507c588c844d84330610

С уважением

1 голос
/ 05 февраля 2020

Ваш первый фрагмент уже выводит правильный набор дат, так что вам просто нужно поместить каждое из них в массив, а не отображать их.

(хотя я не знаю, действительно ли это необходимо, поскольку вы уже можете l oop над переменной $period - но это точно зависит от того, что вы планируете делать с данными впоследствии) .

Пример:

$number_of_dates = 10;

$start_date = new DateTime("1/1/20");
$interval   = DateInterval::createFromDateString("second wednesday");
$period     = new DatePeriod($start_date, $interval, $number_of_dates - 1);

$dates = array(); //declare a new empty array
foreach ($period as $date) {
  $dates[] = $date; //add the date to the next empty array index
}

var_dump($dates);

Или, если вы действительно хотите массив, содержащий строковые представления этих дат, в указанном формате c, то:

$dates2 = array();
foreach ($period as $date) {
   $dates2[] = $date->format("m-d-Y");
}

var_dump($dates2);

Демонстрация в реальном времени: http://sandbox.onlinephpfunctions.com/code/9e58e552edff204ae6df3ca9b437b8c597edf2b3

0 голосов
/ 05 февраля 2020

Попробуйте

<?PHP
$dates = [];
$datetime1 = new DateTime("2020-01-01");
$datetime2 = new DateTime("2020-01-31");

$datetime1->modify('wednesday'); // Start with wednesday
while($datetime1 < $datetime2){
    $dates[] = $datetime1->format('Y-m-d');
    $datetime1->modify('second wednesday'); // Other Wednesday
}
print_r($dates);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...