从PHP日期获取周数(年内)

AJF*_*DIA 61 php date mktime

我想约会并计算一周的编号.

到目前为止,我有以下内容.当它应该是42时它返回24.

<?php
$ddate = "2012-10-18";
$duedt = explode("-",$ddate);
$date = mktime(0, 0, 0, $duedt[2], $duedt[1],$duedt[0]);
$week = (int)date('W', $date);
echo "Weeknummer: ".$week;
?>
Run Code Online (Sandbox Code Playgroud)

数字是否颠倒是错误和巧合吗?或者我差不多了吗?

Mad*_*iha 147

今天,使用PHP的DateTime对象更好:

<?php
$ddate = "2012-10-18";
$date = new DateTime($ddate);
$week = $date->format("W");
echo "Weeknummer: $week";
Run Code Online (Sandbox Code Playgroud)

这是因为在mktime(),它是这样的:

mktime(hour, minute, second, month, day, year);
Run Code Online (Sandbox Code Playgroud)

因此,您的订单是错误的.

<?php
$ddate = "2012-10-18";
$duedt = explode("-", $ddate);
$date  = mktime(0, 0, 0, $duedt[1], $duedt[2], $duedt[0]);
$week  = (int)date('W', $date);
echo "Weeknummer: " . $week;
?>
Run Code Online (Sandbox Code Playgroud)

  • 实际上,你最好只使用PHP的本机DateTime对象. (23认同)
  • @lukaserat与接受的答案所使用的有什么不同(除了事实上OP必须包含对语言中已经存在的东西的外部依赖)? (4认同)
  • 您可以使用Carbon,"https://github.com/briannesbitt/Carbon"来最大化您在日期操作方面的技能.对于碳,您可以通过以下方式实现:`Carbon :: createFromFormat('Ymd H','2012-10-18') - > format('W');` (3认同)
  • 如果 12 月的最后一周也是明年的第一周(如 2019 年),那么对于落在该周内的日期(如 30、31),您将获得周数为 1 (3认同)

pbo*_*ond 52

$date_string = "2012-10-18";
echo "Weeknummer: " . date("W", strtotime($date_string));
Run Code Online (Sandbox Code Playgroud)


And*_*ers 8

正如一个建议:

<?php echo date("W", strtotime("2012-10-18")); ?>
Run Code Online (Sandbox Code Playgroud)

可能比那么多一点简单.

你可以做的其他事情:

<?php echo date("Weeknumber: W", strtotime("2012-10-18 01:00:00")); ?>
<?php echo date("Weeknumber: W", strtotime($MY_DATE)); ?>
Run Code Online (Sandbox Code Playgroud)


小智 7

今天到达日期然后告诉本周的周数

<?php
 $date=date("W");
 echo $date." Week Number";
 ?>
Run Code Online (Sandbox Code Playgroud)


Dre*_*a58 5

当您需要年和周时,变得更加困难。
尝试找出 2017 年 1 月 1 日是哪一周。
(这是2016年的第52周,从2016年12月26日星期一到2017年1月1日星期日)。

经过较长时间的搜索我发现

strftime('%G-%V',strtotime("2017-01-01"))
Run Code Online (Sandbox Code Playgroud)

结果:2016-52


https://www.php.net/manual/de/function.strftime.php
ISO-8601:1988 给定年份的周数,从该年的第一周开始,至少有 4 个工作日,从星期一开始一周中的。(01 至 53)


mysql 中的等效项是 DATE_FORMAT(date, '%x-%v') https://www.w3schools.com/sql/func_mysql_date_format.asp
周,其中星期一是一周的第一天(01 到 53)。


找不到与 DateTime 对应的解决方案。
至少没有像“+1day,上周一”这样的解决方案。


编辑:由于 strftime 现已弃用,也许您也可以使用 date。不过没验证过。

date('o-W',strtotime("2017-01-01"));
Run Code Online (Sandbox Code Playgroud)