2017-06-26 72 views
0

我得到一個奇怪的日期(01/01/1970年00:00:00)當我運行在PHP下面的代碼:添加年內今天的日期在PHP

$now = date('d/m/Y H:i:s', time()); 
$exp = date('d/m/Y H:i:s', strtotime($now .'+100 years')); 
+0

我相信時間長達2099與strtotime。使用'DateTime'類和'format'方法。 – tilz0R

+0

你可能會遇到這個問題:https://en.wikipedia.org/wiki/Year_2038_problem – Doug

+0

[strtotime](http://php.net/manual/en/function.strtotime.php)不喜歡你的格式:'通過查看各種組件之間的分隔符來消除m/d/y或dmy格式中的日期:如果分隔符是斜線(/),則假定美國m/d/y;而如果分隔符是破折號( - )或點(。),則假定歐洲的d-m-y格式。然而,如果年份是兩位數格式,分隔符是短劃線( - ,日期字符串被解析爲ymd.' – aynber

回答

5

我會嘗試的東西像這樣

$date = new DateTime(); 
$exp = $date->modify('+100 years')->format('d/m/Y H:i:s'); 
+0

謝謝。它的工作原理 –

1

請嘗試以下操作之一。

$now = date('d/m/Y H:i:s', strtotime('+100 years')); 

輸出=> 26/06/2117 18時58分07秒

+0

這給出了相同的結果嘗試運行此操作。 –

+0

@NiravJoshi It是否給出了正確的答案,請重新檢查。 –

+0

不,它不是..我只是試過你的代碼.. –

0

嘗試此代碼:

<?php 
$year = date('Y-m-d H:i:s', strtotime('+5 years')); 
echo $year; 
?> 

輸出:

2022年6月26日13: 29:07

+0

什麼發生???爲什麼你們給予負面的印記,這段代碼工作正常? – RaMeSh

0

試試這個

date('d/m/Y H:i:s', strtotime('+100 years')); 

輸出: -

26/06/2117 09:31:15 
+0

爲什麼downvote?什麼是錯的? – Narayan

0

它,因爲你給了這個功能strtotime($now .'+100 years')錯誤的日期格式,並返回false

嘗試:

echo date('d/m/Y H:i:s', strtotime("+100 year")); 
0
$d = date('Y-m-d', strtotime('+5 years')); 
0

你顯然落入一個或兩個以下問題:

  1. 一個簡單的格式問題(這是錯誤肯定的),因爲你使用/作爲分隔符,其中,strtotime解釋日內個月,反之亦然;如可以在documentation page for strtotime (Notes paragraph)讀:在第m

日期/ d/y或DMY格式通過查看 的各種組件之間的分隔符消除歧義:如果分離器是 斜槓(/) ,那麼假設美國的m/d/y;而如果 分隔符是破折號( - )或點(。),則歐洲DMY格式 假定

這可以通過從改變你的第一線容易地固定:

$now = date('d\m\Y H:i:s', time()); 

到:

$now = date('d-m-Y H:i:s', time()); 
  • Year 2038 Problem。您可以閱讀過,在same documentation page(同款,正上方之前的報價):
  • 時間戳的有效範圍一般爲週五,1901年12月13日20時45分54秒 UTC到星期二,2038年1月19日03:14:07 UTC。 (這些是對應於最小值和最大值爲32位日期 簽署 整數)

    如果這是你的情況,你最好使用datetime對象(如其他建議here),這不吃虧這個限制。這裏有一個線,應該工作:

    $exp = date_format(date_create("+100 years"), 'd/m/Y H:i:s'); 
    

    什麼在你的代碼的情況是:

    • 因爲你傳遞一個不存在的日期(也許因爲一個32位環境太),strtotime回報false
    • 傳遞falsedate功能,which expects an int的第二個參數時,false被轉換爲0,這使得date返回Epoch Time
    +0

    ups,我迷路了,試圖讓答案足夠清楚,沒有注意到這麼多人已經回答了:/ – mapofemergence

    +0

    無論如何,我的回答是符合@aynber暗示格式化的是什麼[Bernhard](https://stackoverflow.com/a/44761257/8200213)和[tilz0R](https:// stackove rflow.com/questions/44760770/add-years-to-todays-date-in-php/44762681#comment76502249_44760770)表示約32位的限制。 我的解決方案與[Ivan G's](https://stackoverflow.com/a/44760826/8200213)非常相似。 我在Stack Overflow上還是比較新的:如果我的回覆是多餘的,讓我知道,我會刪除它 – mapofemergence