2013-12-24 2 views
-1

Когда дана дата начала, она должна получить дату окончания, получая только воскресенья или mon, tue, wed или, mon to fri или tue, thurs, sat using php. пожалуйста кто-нибудь мне помочь .....получить дату окончания автоматически, используя определенные дни в php


Here is my html code: 




<label>Start Date:</label><input type="text" id="txtStartDate" name="sd"></input> 
<td>days</td> 
<td> 
<select name="days"> 
    <option value="" >only sunday</option> 
    <option value="batch">sat and sun</option> 
    <option value="">M-F</option> 
    <option value="">M-W-F</option> 
    <option value="">TU-THUR-SAT</option> 
</td> 
<td> 
    <input type="submit" value="Submit" name="sub" /> 
</td> 

<?php 
//$startdate=$_POST['sd']; 
$startdate='2013-12-25'; 
$date=date_create($startdate); 
date_add($date,date_interval_create_from_date_string("10 days")); 
echo date_format($date,"Y-m-d"); 
?> 

выбирающих только с помощью количества дней, но я хочу получить, используя определенные дни.

+3

Я предлагаю объясняющие ваш вопрос с некоторыми примерами. Это немного сложно понять. – paquino

+0

Используя данные параметры и дату начала, я хочу получить дату окончания. Вышеприведенный код извлекает только количество дней. (i.e) мне нужно получить enddate, используя startdate, и он должен получать только воскресенье или т. д. с даты начала и должен отображать дату окончания – user3132845

+0

Я понимаю, что вы знаете, что вы имеете в виду, но это не совсем ясно. Извини за это. Вы имеете в виду получить что-то вроде следующей среды? Если вы могли бы предоставить немного больше предыстории, например. почему вы это делаете, это может пролить свет на нас, поэтому мы можем помочь вам :) –

ответ

0

магазина, что дни, которые вы хотите использовать в значениях опций, т.е.

<select name="days"> 
    <option value="sunday" >only sunday</option> 
    <option value="saturday-sunday">sat and sun</option> 
    <option value="monday-tuesday-wednesday-thursday-friday">Monday to Friday</option> 
    <option value="monday-wednesday">Only Monday or Wednesday</option> 
</select> 

if (isset($_POST['sd']) && isset($_POST['days'])) { 

    $startDate = new DateTime($_POST['sd']); 
    $days = explode('-', $_POST['days']); 
    $count = count($days); 
    $dates = array(); 

    $currentDate = $startDate->format('Y-m-d'); 
    $j = 0; 

    for ($i=0;$i<10;$i++) { 

     $day = $days[$j]; 
     $a = new DateTime($currentDate); 
     $a->modify("next $day"); 
     $dates[] = $currentDate = $a->format('Y-m-d'); 

     $j = (($j+1) == $count) ? 0 : $j++; 

    } 

    foreach ($dates as $date) { 
     echo $date.'<br />'; 
    } 
} 

Надеется, что это помогает! :)

EDIT

или если вы хотите только последний из массива:

вместо foreach использования

echo end($dates); 
+0

:) этот работает хорошо, но я хочу получить последнюю дату 4m этого .. – user3132845

+0

Извините, что вы подразумеваете под "ly last date 4m this"? –

+0

@ user3132845 Я внес изменения в свой ответ. Я не уверен, что это именно то, что вы имели в виду. –

0

Рассмотрите возможность использования StrToTime

<option value="SUNDAY" >only sunday</option> 
    <option value="SATSUN">sat and sun</option> 
    <option value="MF">M-F</option> 
    <option value="MWF">M-W-F</option> 
    <option value="TUTHURSAT">TU-THUR-SAT</option> 


    <?php 

    $option = //get selected option; 
    $startDate = //get selected date; 
    $days = array(); 
    switch($option){ 
     case 'SUNDAY' : $days[] = 'next sunday'; break; 
     case 'SATSUN' : $days[] = 'next saturday'; $days[] = 'next sunday'; break; 
     //etc 
    } 

    $count = 0; 
    $endDate = $startDate; 
    while ($count < 10){ 
     $index = $count++ % count($days); 
     $endDate = date('Y-m-d' , strtotime($days[$index] , strtotime($endDate))); 
    } 

    echo $endDate; 

Demo

+0

paquino: он показывает ошибку в то время как часть будет у PLS объяснить это – user3132845

+0

Что ошибка Посмотрите на демо на дне – paquino

+0

ошибки \t Предупреждение....: Отдел на ноль \t Примечание: Неопределенное смещение – user3132845

Смежные вопросы