Jquery日期选择器和PHP日期时间不一致?

6

我试图做一些看起来很简单的事情,但是却无法正确地连接。

用户从启用了showWeekjquery日期选择器中选择一个日期。

$(".datepicker").datepicker({
    showWeek: true,
    changeMonth: true,
    changeYear: true,
    dateFormat: 'yy-mm-dd'
});

但是,当将生成的日期字符串输入到php datetime中时,星期不对应,并且比实际日期晚了1周。

$start_date = isset($_POST['startdate']) ? $_POST['startdate'] : "";
$start = new DateTime($start_date);
echo $start->format("W"); 

在我的日期选择器中,IE 2018年10月02日显示为第39周,但从datetime读取该日期并格式化为周后返回的echo显示为第40周。

据我所知,jquery日期选择器和php datetime类默认情况下对于哪些周是哪些不一致。

有没有办法协调这个问题?

PHP的date表示符合ISO-8601标准,在线检查证实了php是正确的,那么如何修复日期选择器以正确显示?


1
你使用的是哪个日期选择器,因为有很多库可供选择。 - Sigma
呵呵,日期选择器文档(calculateWeek)也声称使用ISO-8601。我认为日期选择器存在一个错误。 - KarelG
@sigma 我已经添加了一个链接,我正在使用标准的jquery日期选择器小部件。 - ErosRising
1个回答

4

好的,这里是解决方法:根据 jQuery UI 的说明,您需要指定第一天,但在您的代码中缺失了这一点:

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Datepicker - Show week of the year</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#datepicker" ).datepicker({
      showWeek: true,
      firstDay: 1,
      changeMonth: true,
      changeYear: true,
      dateFormat: 'yy-mm-dd'
    });
  } );
  </script>
</head>
<body>
 
<p>Date: <input type="text" id="datepicker"></p>
 
 
</body>

只需添加firstDay: 1,一切都会按您的期望工作。


美丽,谢谢。不过我想了解它是为什么有效的...它将一行中显示的第一天设置为星期一,而默认值为星期日。该行显示了该行第一天所在周的周数,因此导致了差异?我很惊讶jQuery没有默认使用星期一来避免这个问题! - ErosRising
根据文档和API,您必须设置一周的第一天。星期日为0,星期一为1,以此类推。请看这里:http://api.jqueryui.com/datepicker/#option-firstDay 这是来自jquery官方页面的解释:日期选择器可以显示一年中的周数。默认计算遵循ISO 8601定义:一周从星期一开始,一年的第一周包含该年的第一个星期四。这意味着一些天可能被放置在“属于”另一年的周中。看起来很复杂,但最终有一个不错的逻辑 :) - Sigma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接