2017-02-27 62 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