php - PHP日期“上一个工作日”输出错误的月份
问题描述
我正在尝试last weekday
使用下面的代码获取当前月份的日期。
我期待它的行为就像所有其他运营商一样last friday of
,并在本月的最后一个工作日输出。而是输出上个月的最后一个工作日。
我知道我可以通过使用来纠正这个问题,modify( '+1 month' )
但为什么呢?为什么其他运营商喜欢last tuesday of
工作正常但last weekday
需要1个月提升?
<?php
// outputs the previous months date
$gettoday = date( "Y-m-01" );
$freqdate = date( 'Y-m-d', strtotime( 'last weekday '.$gettoday ) );
echo 'next '.$freqdate;
//get the correct date
$gettoday = new DateTime( $gettoday );
$gettoday->modify( '+1 month' );
$gettoday = date_format( $gettoday, 'Y-m-01' );
$freqdate = date( 'Y-m-d', strtotime( $gettoday . ' last weekday' ) );
echo 'next '.$freqdate;
?>
解决方案
看来您对“最后”在这里的实际含义有错误的理解。
这与一个月的最后一天或最后一周无关——它是“最后一天”,就像“最近的前一天”一样。
你可以从类似的东西开始strtotime('last day of 2020-03')
- 这会给你31 Mar 2020
,这是一个星期二。
如果您然后检查这是一周中的哪一天,它可能是星期六或星期日 -那么您可以last friday
再次使用该值,以降落在该月的最后一周。
编辑:
2020 年所有月份的示例
for($i=1; $i<13; ++$i) {
$year_month = '2020-'.$i;
$last_of_month = strtotime('last day of '.$year_month);
$weekday = date('N', $last_of_month);
if($weekday < 6) {
echo 'last weekday of ', $year_month, ' is ', date('Y-m-d, l', $last_of_month), "<br>\n";
}
else {
$last_weekday_of_month = strtotime('last friday', $last_of_month);
echo 'last day of ', $year_month, ' is ', date('Y-m-d, l', $last_of_month), ' - last weekday of ', $year_month, ' is ', date('Y-m-d, l', $last_weekday_of_month), "<br>\n";
}
}
这将为您提供以下输出:
last weekday of 2020-1 is 2020-01-31, Friday
last day of 2020-2 is 2020-02-29, Saturday - last weekday of 2020-2 is 2020-02-28, Friday
last weekday of 2020-3 is 2020-03-31, Tuesday
last weekday of 2020-4 is 2020-04-30, Thursday
last day of 2020-5 is 2020-05-31, Sunday - last weekday of 2020-5 is 2020-05-29, Friday
last weekday of 2020-6 is 2020-06-30, Tuesday
last weekday of 2020-7 is 2020-07-31, Friday
last weekday of 2020-8 is 2020-08-31, Monday
last weekday of 2020-9 is 2020-09-30, Wednesday
last day of 2020-10 is 2020-10-31, Saturday - last weekday of 2020-10 is 2020-10-30, Friday
last weekday of 2020-11 is 2020-11-30, Monday
last weekday of 2020-12 is 2020-12-31, Thursday
推荐阅读
- r - 更改图形图例以指示线型...(ggplot2)
- c# - Visual Studio 找不到 IIS Express
- r - R闪亮的反应图并选择默认值
- python - 在 Django 中处理用户触发的任务(如导入数据)的最佳方式
- react-native - 返回一个空的 FlatList
- android - 如何使用 Dagger2 在 ViewModel 构造函数中注入 WorkManager 实例?
- c# - Protobuf-net 将字符串字段反序列化为 c# guid
- wso2 - 在 Windows 上启动 WSO2 5.10 时出现无限循环
- javascript - Firebase 可调用云函数 CORS 错误
- html - 是否有 github 操作或工作流来格式化 html 文件或以编程方式执行它的方法是安全的?