Php 使用datetime比较两个自定义日期字段中的月份

Php 使用datetime比较两个自定义日期字段中的月份,php,datetime,Php,Datetime,我们的网站进行节日回顾,为此,我们希望能够通过日期时间选择器自定义字段选择开始日期(基准)和结束日期(eind_基准)。最终,我们需要一个函数来确定开始日期和结束日期是否与某个月相同,因此我们最终会得到这样的结果 “1-4巨力2020”(而不是“1-4巨力2020”) 当月份不同时,我们希望它显示如下 “30 Juni-4 Juli 2020” 我尝试了几种方法,但似乎都不管用,这个月需要用荷兰语,我尝试了设置区域设置,但没有帮助,下面的代码在这一行抛出了一个错误 “$first=$startd

我们的网站进行节日回顾,为此,我们希望能够通过日期时间选择器自定义字段选择开始日期(基准)和结束日期(eind_基准)。最终,我们需要一个函数来确定开始日期和结束日期是否与某个月相同,因此我们最终会得到这样的结果

“1-4巨力2020”(而不是“1-4巨力2020”)

当月份不同时,我们希望它显示如下 “30 Juni-4 Juli 2020”

我尝试了几种方法,但似乎都不管用,这个月需要用荷兰语,我尝试了设置区域设置,但没有帮助,下面的代码在这一行抛出了一个错误 “$first=$startdateTime->format('F');”

有人能帮忙吗

 <?php  

$start_date = get_field('datum');
$end_date = get_field('eind_datum');
$startdatetime = DateTime::createFromFormat('Y-m-d H:i:s', $start_date);
$enddatetime = DateTime::createFromFormat('Y-m-d H:i:s', $end_date);
$first = $startdateTime->format('F');
$second = $enddateTime->format('F');
    
 if (get_field('eind_datum') and get_field('datum') and ($first == $second )) {
  echo  $start_date->format ('j'); echo "-"; echo $end_date->format ('j F Y') ;
 }
 elseif (get_field('eind_datum') and get_field('datum') and ($first != $second )) {
  echo  $start_date->format('j F'); echo "-"; echo $end_date->format ('j F Y') ; 
 }
 else {
  echo the_field('datum') ;
 }
 ?>

以下各项应起作用:

$start_date=get_字段('datum');
$end_date=get_字段(“eind_数据”);
$startdatetime=新的日期时间不可变($start\u date);
$enddatetime=新日期时间不可变($end_date);
$first=$startdatetime->format('F');
$second=$enddatetime->format('F');
如果($start_date和$end_date和($first==$second)){
echo$startdatetime->format('j');echo“-”echo$enddatetime->format('jfy');
}
elseif($end_date和$start_date和($first!=$second)){
echo$startdatetime->format('jf');echo“-”echo$enddatetime->format('jfy');
}
否则{
echo$start_日期;
}

代码中的问题是变量有时调用不正确。例如:
$start\u date
不是一个对象,您不能在其上调用方法
format
。。。或者未定义
$startdateTime
,而是
$startdateTime

在某些条件下,您也可以创建格式“2020年7月1日-4日”,如果月份相同,则使用preg_replace()删除月份

$dateStr = '1 Juli - 4 Juli 2020';
$dateStr = preg_replace('~^(\d+) (\w+) - (\d+) (\2)~',"$1-$3 $2",$dateStr);

如果月份不相等,则不会删除任何内容。

遗憾的是,这会给出一个错误“致命错误:未捕获异常:DateTimeImmutable::\uu construct():无法分析位置0(1)处的时间字符串(13 oktober 2020):第26行上的意外字符”。本例中的第26行是$startdatetime行。自定义字段日期格式为Y-m-d H:i:s。根据错误消息,收到的日期为“13 oktober 2020”,而不是13-10-2020。。。你能确定一下吗?只需在第一个
新日期immutable
之前插入(var\u dump($start\u date)),就可以了。日期以Y-m-DH:i:s的形式存储在sql中,但高级自定义字段输出设置为JFY(因此最初会产生混淆)。因此,它显示13 oktober 2020是有意义的。这将是一个理想的解决方案。然而,$datestr将是“1Juli 2020-4Juli 2020”,我试图用这段代码解决它,但失败了$dateSt=preg_replace(“~^(\d+)(\w+)(\d+)-(\d+)(\2)(\3)~”,“$1-$4$2$3”,$dateSt);另外,如果使用两个自定义字段的值,我将如何格式化$datestr?Juli是德语。DateTime格式方法始终以英语返回月份,即七月。我假设您已经拥有字符串“'1Juli-4Juli 2020”。语言中的日期格式​​除了英语是一个不同的问题。