2017-03-31 172 views
1

我想添加一些日曆月到日期。我已經完成了JavaScript,但我會在PHP中做出相同的功能(我更新)。 這是JavaScript代碼:Php將日曆月添加到日期

var date = '2017-08-30'; 
 
var addMonth=6; 
 
var arrDate = date.split("-"); 
 
var dateSrt = new Date(date); 
 
var newSrvDate = new Date(dateSrt.getTime()); 
 

 
newSrvDate.setMonth(dateSrt.getMonth() + (addMonth), arrDate[2]); 
 
if (newSrvDate.getMonth() > (dateSrt.getMonth() + (addMonth)) % 12) { 
 
    newSrvDate.setDate(0); 
 
} 
 
srvDay = new Date(newSrvDate.getFullYear(), newSrvDate.getMonth() , newSrvDate.getDate()); 
 
alert("Start:"+dateSrt); 
 
alert("End:"+srvDay);

在這種情況下,如果I 6幾個月內,以2017年8月30日將是2018年2月30日,但它不存在,所以它成爲2018-03-02。 我想,如果日期存在好,在其他情況下,本月的最後一天...

我希望我很清楚...代碼在JavaScript中完美工作,但我不能在它重現它PHP

任何建議埃雷歡迎

+1

你有沒有看過PHP的[DateTime類](http://php.net/manual/en/class.datetime.php),[DateTime-> add()](http://php.net/手動/ EN/datetime.add.php)? – aynber

回答

0

入住日期checkdate()如果在公曆日期有效的日期或不是。如果不存在,則從日期中減去1天(24小時),然後再檢查是否存在。就像在下面的代碼中沒有使用任何類(純PHP)一樣。

在這裏,你在JS等效的代碼在PHP中。

$date = '2017-08-30'; 
$newDate = strtotime($date)+6*30*24*60*60; 
$exploded = explode('-',$date); 
$month = $exploded[1]; 
$year = $exploded[0]; 
$day = $exploded[2]; 

$new_month = $exploded[1]+6; 
if($new_month>12){ 
    $month = $new_month-12; 
    $year = $year+1; 
} 
else{ 
    $month = $new_month; 
} 
echo $year."-".$month."-".$day; 

//Function to check date recursively............. 
function check_date($year,$month,$day){ 
    if(!checkdate($month,$day,$year)){ 
     $day = $day-1; 
     return check_date($year,$month,$day); 
    } 
    else{ 
     return $year."-".$month."-".$day; 
    } 
} 

$final_date = check_date($year,$month,$day); 
echo date("Y-m-d",strtotime($final_date)); 

但我會建議你看看到DateTime類,也看date()

注:這是該月的一天將被保留代碼和回答對你的問題「我想,如果日存好了,在其他情況下,該月的最後一天。 ...

+0

非常感謝...在nex時間 –

0

使用DateTimeDateInterval PHP類很容易。

下面的代碼將格式爲「年月日」的字符串(4個位數年份,2位月份,2位數日,破折號分開)將其轉換爲DateTime對象,加上6個月,然後回頭DateTime成根據原始格式的字符串。

的代碼實際上是自我解釋...

<?php 
$dateStr = '2017-08-30'; 

$date = DateTime::createFromFormat('Y-m-d', $dateStr); 
$interval = DateInterval::createFromDateString('6 months'); 
$date->add($interval); 

$dateStr = $date->format('Y-m-d'); 

echo "$dateStr\n"; // outputs 2018-03-02 

供您參考:

http://php.net/manual/en/class.datetime.php

http://php.net/manual/en/datetime.createfromformat.php

http://php.net/manual/en/datetime.add.php

http://php.net/manual/en/dateinterval.createfromdatestring.php