2017-02-27 2 views
1

以前はスペイン語に翻訳された2つの日付ピッカーを使用して、ユーザーが入力する日付の範囲を保存しようとしています。スペイン語でjQueryUI datepickerとphpを使用して日付の範囲を取得します。

問題は、私がstrtotime()を日付に使用すると、その月が日になり、逆も同様です。

例: 私は27日05と2017年の日を選択しますが、月が27以降の戻り値は不正な日付書式です。私は01月の05年の2017年を選択すると、月のここ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

ようこそスタックオーバーフロー!申し訳ございませんが、このサイトでは質問を*英語*にのみ掲載する必要があります。これを自分で翻訳してください。あなたのために翻訳してくれた誰かが、あなたがコメントと回答を理解するのを助けたり、フィードバックに応えたりするのに役立たないでしょう。 –

答えて

0

strtotimeなどの日付を示していdatetime文字列を解析するとき。スラッシュで区切られた日付を使用すると、アメリカ式のm/d/yとみなされます。ピリオドで区切られた日付(または年が4桁の場合はダッシュ)を使用する場合は、残りの世界のスタイル(d.m.yまたはd-m-Y)と見なされます。 (あなたが唯一の2桁の年と使用ダッシュを使用する場合、PHPはy-m-dとしてそれを解析しようと試みることに注意してください。)代わりにstrtotime

を、あなたがしてから、あなたの日付文字列を構築し、DateTimeオブジェクトを取得するためにdate-create-from-format/DateTime::createFromFormatを使用する必要がありますそれ。コメントに基づいて

UPDATE:したい出力を得るために、あなたは出力を作るために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

関連する問題