2017-02-27 76 views
1

我試圖保存一段日期,用戶將通過2個日期選擇器將之前翻譯成西班牙語來填寫日期。使用jQueryUI datepicker和php取得日期範圍,西班牙文

問題是,當我在日期上使用strtotime()時,將月份作爲一天,反之亦然。

例如: 我選擇第27天的05月和2017年,但返回值是一個不正確的日期格式,因爲月份是27.如果我選擇第01天05月2017年,那麼它顯示在陣列中爲第05天月01和2017年

下面是我用採取從輸入文本的日期,並生成日期

function takedates() { 
    if(isset($_POST['repS'])){  
     $dateStart = $_POST['txtdesde']; 
     $dateEnd = $_POST['txthasta']; 
     $fechaArray = generafechas($dateStart,$dateEnd); 
    } 

function generafechas($date1,$date2){ 
    $fecharray = array(); 
    if (is_string($date1) === true){    
     $deit1 = strftime("%d-%m-%Y",strtotime($date1));    
    } 
    if (is_string($date2) === true){    
     $date2 = strftime("%d-%m-%Y",strtotime($date2));    
    } 
    do { 
     $fecharray[] = date("m-d-Y", $date1); 
     $date1 = strtotime("+1 day", $date1); 
    } while($date1 <= $date2); 
    return $fecharray; 
} 
?> 

我的問題的範圍內的功能是:我如何填充數組日期格式爲西班牙文日期?

PS:我已經在那裏我使用這些功能的文件中使用setLocale(LC_TIME,'es_ES'),並且輸入這樣表示「DD/MM/YYYY」

+5

請用英文寫問題 –

+3

我相信這個網站有西班牙語版本,你可以在這裏發表這個問題。如果你想保留在這裏,這需要翻譯成英文。 – Lexi

+1

歡迎來到Stack Overflow!對不起,本網站要求您僅以*英文*發佈您的問題。請自己翻譯一下;別人爲你翻譯並不會幫助你理解評論和答案,或迴應反饋。 –

回答

0

strtotime日期不把你的語言環境考慮解析日期時間字符串時。如果您使用斜線分隔日期,則假定爲美式m/d/y。如果您使用以句點分隔的日期(如果年份爲四位數,則使用破折號),則假定其爲世界上其他樣式(d.m.yd-m-Y)。 (請注意,如果你只使用一個兩位數的年份和使用破折號,PHP會盡量嘗試分析它作爲y-m-d

相反的strtotime,你應該使用date-create-from-format/DateTime::createFromFormat得到一個DateTime對象,然後從建立你的日期字符串那。

更新基於評論:爲了得到你想要的輸出,你需要使用intl擴展的IntlDateFormatter class使輸出。

修改代碼上面(未經測試):

function generafechas($date1,$date2){ 
    $fecharray = array(); 

    if (is_string($date1) && is_string($date2)){ 
     // These lines assume the input is formatted `day-month-year`, 
     // with 2-digit day and month, and 4-digit year. 
     $date1 = DateTime::createFromFormat('d-m-Y', $date1) 
     $date2 = DateTime::createFromFormat('d-m-Y', $date2) 
    } else { 
     throw new InvalidArgumentException('Must provide two date strings'); 
    } 

    // Create the formatter 
    $formatter = IntlDateFormatter::create('es_ES', null, null, null, null, "d 'de' MMMM 'del' yyyy"); 

    do { 
     // This line prints the first date in the format you chose above 
     $fecharray[] = $formatter->format($date1); 
     $date1->add(new DateInterval("P1D")); // `P1D` means "Duration of 1 Day" in the ISO 8601 standard 
    } while($date1 <= $date2); 

    return $fecharray; 
} 

如果您提供的區域設置與數據一起,你可以改變什麼格式的字符串作爲需要createFromFormat使用。

+0

非常感謝您的回答,但是我正在使用現有數據處理數據庫,而且我沒有權限更改它,這就是爲什麼我必須創建一個數組來選擇日期範圍,因爲日期該數據庫插入爲Varchar,並以這種格式示例:「18 de mayo del 2016」,所以這是一個痛苦,反正感謝信息 – Sojansons

+0

@Sojansons所有你需要做的就是改變輸出格式。我已經更新了我的答案。 –

+0

哦,我的,謝謝你真的很有用,我發現了一個解決方法,但這節省了我的線路,它更好!再次感謝。 – Sojansons