2015-11-07 97 views
1

我有日期女巫格式化d-m-y22-10-49我想將其轉換爲Date對象以將其保存在我的mysql數據庫中。我嘗試:在PHP中創建日期對象,以1970年之前的日期爲特定格式

DateTime::createFromFormat('d-m-y', $mydate , new DateTimeZone('GMT')); 

但結果是2049-10-22而不是1949-10-22。我搜索了一下,得知那個createFromFormat只是在1970年之後才返回日期,但我不知道該怎麼辦。

P.s:22-10-49是我所擁有的,還有其他幾個這樣的日期,我無法更改它的格式或將它轉換爲22-10-1949或任何其他格式。 PS 2:「我用生日和excpect 22-10-15工作是1915年而不是2015年

+0

@Strawberry我沒有得到它,你是什麼意思? –

+0

@Strawberry 2015-10-22。 1970年前沒有任何工作,日期假定在1970-2069範圍內 –

+0

假設你有一個像22-10-15這樣的值。你會期望實現1915年或2015年?如果答案是'我期望它是2015',那麼哪一年是截止?難道只有超過'15'的任何值都指的是20世紀的一年 – Strawberry

回答

1

試試這個功能

編輯:首先,我們將轉換兩位數年份在4位數然後我們。將形成完整的日期,並把它傳遞給函數

$original_date = '22-10-49'; 
    $date_part = explode('-',$original_date); 

    $baseyear = 1900; // range is 1900-2062 
    $shortyear = $date_part[2]; 
    $year = 100 + $baseyear + ($shortyear - $baseyear) % 100; 
    $subdate = substr($original_date, 0, strrpos($original_date, '-')); 
    $string = $subdate."-".$year; 

    echo safe_strtotime($string); 

function safe_strtotime($string) 
{ 
    if(!preg_match("/\d{4}/", $string, $match)) return null; //year must be in YYYY form 
    $year = intval($match[0]);//converting the year to integer 
    if($year >= 1970) return date("Y-m-d", strtotime($string));//the year is after 1970 - no problems even for Windows 
    if(stristr(PHP_OS, "WIN") && !stristr(PHP_OS, "DARWIN")) //OS seems to be Windows, not Unix nor Mac 
    { 
     $diff = 1975 - $year;//calculating the difference between 1975 and the year 
     $new_year = $year + $diff;//year + diff = new_year will be for sure > 1970 
     $new_date = date("Y-m-d", strtotime(str_replace($year, $new_year, $string)));//replacing the year with the new_year, try strtotime, rendering the date 
     return str_replace($new_year, $year, $new_date);//returning the date with the correct year 
    } 
    return date("Y-m-d", strtotime($string));//do normal strtotime 
} 

輸出:1949年10月22日

來源:Using strtotime for dates before 1970

+0

我其實從別的地方看過這個日期,我把它當成'22-10-49',我確定應該有另一種方式。我不想通過「if ... else」來更改我的日期格式。但謝謝你的回答 –

+0

@ShirinAbdolahi,日期格式修復每個日期你正在得到?即22-10-49,22-10-15,15-07-54等。 – Suyog

+0

是的,它是固定的@suyog –