我试图保存一系列日期,这些日期将由用户通过以前翻译为西班牙语的2个日期选择器填写。
问题在于,当我在日期上使用strtotime()
时,将月份作为日期,反之亦然。
实施例: 我选择日期27个月05和2017年,但返回值是一个不正确的日期格式,因为月份为27.如果我选择日期01月05日2017年,那么它将在阵列中显示为05月01日和2017年。< / p>
以下是我用来从输入文本中获取日期以及生成日期之间范围的函数
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')
,输入显示了这样的日期&#34; dd / mm / yyyy&#34;
答案 0 :(得分:0)
strtotime
不会考虑您的语言环境。如果您使用以斜杠分隔的日期,则假定它是美式m/d/y
。如果您使用以句点分隔的日期(如果年份是四位数,则使用短划线),则假定它是世界其他风格(d.m.y
或d-m-Y
)。 (请注意,如果您只使用两位数年份并使用破折号,PHP会尝试将其解析为y-m-d
。)
而不是strtotime
,您应该使用date-create-from-format
/ DateTime::createFromFormat
来获取DateTime
对象,然后从中构建日期字符串。
基于评论的更新:为了获得您想要的输出,您需要使用intl
扩展程序IntlDateFormatter
class来生成输出。< / p>
修改上面的代码(未经测试):
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
中使用的格式字符串。