14 ответов:
$time = strtotime("2010.12.11"); $final = date("Y-m-d", strtotime("+1 month", $time)); // Finally you will have the date you're looking for.
мне нужна была подобная функциональность, за исключением месячного цикла (плюс месяцы, минус 1 день). После поиска S. O. некоторое время я смог создать это решение plug-n-play:
function add_months($months, DateTime $dateObject) { $next = new DateTime($dateObject->format('Y-m-d')); $next->modify('last day of +'.$months.' month'); if($dateObject->format('d') > $next->format('d')) { return $dateObject->diff($next); } else { return new DateInterval('P'.$months.'M'); } } function endCycle($d1, $months) { $date = new DateTime($d1); // call second function to add the months $newDate = $date->add(add_months($months, $date)); // goes back 1 day from date, remove if you want same day of month $newDate->sub(new DateInterval('P1D')); //formats final date to Y-m-d form $dateReturned = $newDate->format('Y-m-d'); return $dateReturned; }пример:
$startDate = '2014-06-03'; // select date in Y-m-d format $nMonths = 1; // choose how many months you want to move ahead $final = endCycle($startDate, $nMonths); // output: 2014-07-02
использовать
DateTime::add.$start = new DateTime("2010-12-11", new DateTimeZone("UTC")); $month_later = clone $start; $month_later->add(new DateInterval("P1M"));Я клон потому что add изменяет исходный объект, который может быть нежелателен.
strtotime( "+1 month", strtotime( $time ) );Это возвращает метку времени, которая может быть использована с датой функция
Я использую этот способ: -
$occDate='2014-01-28'; $forOdNextMonth= date('m', strtotime("+1 month", strtotime($occDate))); //Output:- $forOdNextMonth=02 /*****************more example****************/ $occDate='2014-12-28'; $forOdNextMonth= date('m', strtotime("+1 month", strtotime($occDate))); //Output:- $forOdNextMonth=01 //***********************wrong way**********************************// $forOdNextMonth= date('m', strtotime("+1 month", $occDate)); //Output:- $forOdNextMonth=02; //instead of $forOdNextMonth=01; //******************************************************************//
(date('d') > 28) ? date("mdY", strtotime("last day of next month")) : date("mdY", strtotime("+1 month"));это будет компенсировать февраль и другие 31 день месяцев. Вы могли бы, конечно, сделать гораздо больше проверки, чтобы получить более точную Для "этот день в следующем месяце"относительные форматы дат (что, к сожалению, не работает, см. ниже), и вы могли бы также использовать DateTime.
и
DateInterval('P1M')иstrtotime("+1 month")по существу слепо добавляют 31 день независимо от количества дней в следующем месяце.
- 2010-01-31 => марта 3-й
- 2012-01-31 => 2 марта (в високосный год)
пожалуйста, сначала вы установите формат даты, как 12-12-2012
после использования этой функции он работает правильно;
$date = date('d-m-Y',strtotime("12-12-2012 +2 Months");здесь 12-12-2012-это ваша дата и +2 месяца-это приращение месяца;
вы также увеличиваете год, дату
strtotime("12-12-2012 +1 Year");Ans - это 12-12-2013
можно использовать
DateTime::modifyтакой :$date = new DateTime('2010-12-11'); $date->modify('+1 month');посмотреть документацию :
спасибо Джейсон, ваш пост был очень полезным. Я переформатировал его и добавил больше комментариев, чтобы помочь мне понять все это. В случае, если это кому-то поможет, я разместил его здесь:
function cycle_end_date($cycle_start_date, $months) { $cycle_start_date_object = new DateTime($cycle_start_date); //Find the date interval that we will need to add to the start date $date_interval = find_date_interval($months, $cycle_start_date_object); //Add this date interval to the current date (the DateTime class handles remaining complexity like year-ends) $cycle_end_date_object = $cycle_start_date_object->add($date_interval); //Subtract (sub) 1 day from date $cycle_end_date_object->sub(new DateInterval('P1D')); //Format final date to Y-m-d $cycle_end_date = $cycle_end_date_object->format('Y-m-d'); return $cycle_end_date; } //Find the date interval we need to add to start date to get end date function find_date_interval($n_months, DateTime $cycle_start_date_object) { //Create new datetime object identical to inputted one $date_of_last_day_next_month = new DateTime($cycle_start_date_object->format('Y-m-d')); //And modify it so it is the date of the last day of the next month $date_of_last_day_next_month->modify('last day of +'.$n_months.' month'); //If the day of inputted date (e.g. 31) is greater than last day of next month (e.g. 28) if($cycle_start_date_object->format('d') > $date_of_last_day_next_month->format('d')) { //Return a DateInterval object equal to the number of days difference return $cycle_start_date_object->diff($date_of_last_day_next_month); //Otherwise the date is easy and we can just add a month to it } else { //Return a DateInterval object equal to a period (P) of 1 month (M) return new DateInterval('P'.$n_months.'M'); } } $cycle_start_date = '2014-01-31'; // select date in Y-m-d format $n_months = 1; // choose how many months you want to move ahead $cycle_end_date = cycle_end_date($cycle_start_date, $n_months); // output: 2014-07-02
function dayOfWeek($date){ return DateTime::createFromFormat('Y-m-d', $date)->format('N'); }примеры использования:
echo dayOfWeek(2016-12-22); // "4" echo dayOfWeek(date('Y-m-d')); // "4"
$date = strtotime("2017-12-11"); $newDate = date("Y-m-d", strtotime("+1 month", $date));Если вы хотите приращения по дням, вы также можете сделать это
$date = strtotime("2017-12-11"); $newDate = date("Y-m-d", strtotime("+5 day", $date));
для тех, кто ищет ответ на любой формат даты.
echo date_create_from_format('d/m/Y', '15/04/2017')->add(new DateInterval('P1M'))->format('d/m/Y');просто измените формат даты.
<?php $selectdata ="select fromd,tod from register where username='$username'"; $q=mysqli_query($conm,$selectdata); $row=mysqli_fetch_array($q); $startdate=$row['fromd']; $stdate=date('Y', strtotime($startdate)); $endate=$row['tod']; $enddate=date('Y', strtotime($endate)); $years = range ($stdate,$enddate); echo '<select name="years" class="form-control">'; echo '<option>SELECT</option>'; foreach($years as $year) { echo '<option value="'.$year.'"> '.$year.' </option>'; } echo '</select>'; ?>
поместите дату в поле ввода, затем нажмите кнопку Получить день от даты в jquery
$(document).ready( function() { $("button").click(function(){ var day = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; var a = new Date(); $(".result").text(day[a.getDay()]); }); });
Comments