2020-08-09

//获取日历自然周的算法
public funciont get_week_day($data){
$sdefaultDate = $date;

$first=1;

$w = date('w', strtotime($sdefaultDate));
//获取当前日期所在周的周一日期
$week_start=date('Y-m-d', strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));

$m = date('Ym',strtotime($week_start));    //周一所属月份
$start = date('Ym01',strtotime($week_start));  //当月一号
$end = date('Ymd',strtotime($week_start));    //周一所在日期

$n = 0;
for($i = $start;$i <= $end;$i++){
    if(date('w',strtotime($i)) == 1){
        $n++;
    }
}

return $n;

}

 

 

public function get_week_day2($date){

$time = strtotime($date);
$wk_day = date('w', strtotime(date('Y-m-1 00:00:00', $time))) ? : 7; //今天周几
$day = date('d', $time) - (8 - $wk_day); //今天几号
return $day <= 0 ? 1 : ceil($day / 7) + 1; //计算是第几个星期

}

### 常见错误:使用 `YEAR()` 函数提取日期年份时出现错误的原因 在 SQL 查询中,`YEAR()` 是常用的日期函数之一,用于从完整的日期时间值中提取年份部分。然而,在某些情况下,执行该函数可能会导致语法错误或运行时错误,主要原因包括: - **输入参数格式不正确**:`YEAR()` 函数要求传入一个有效的日期或日期时间类型的列或表达式。如果传递的是字符串类型且未进行显式转换,则数据库可能无法识别其为合法的日期格式[^1]。例如: ```sql SELECT YEAR('2023/05/15') AS year_value; ``` 上述语句在某些数据库系统(如 MySQL)中可以正常执行,但在其他系统(如 SQL Server)中则需要先使用 `CAST` 或 `CONVERT` 显式将字符串转换为 `DATE` 类型[^1]。 - **数据库方言差异**:不同的数据库管理系统对日期函数的支持存在差异。例如,MySQL 和 SQL Server 支持 `YEAR()` 函数,而 Oracle 则使用 `EXTRACT(YEAR FROM date_column)` 的方式来获取年份信息[^1]。因此,若在非兼容的数据库中直接复制 SQL 代码,可能导致函数调用失败。 - **字段数据包含非法日期值**:当查询的目标列中存在无效的日期数据(如 `'0000-00-00'` 或非标准格式字符串),即使数据库支持隐式转换,也可能在运行时抛出异常或返回错误结果。 - **权限或上下文限制**:在某些数据库环境中,用户可能没有足够的权限访问特定的内置函数,或者在视图、存储过程中使用了不被允许的函数结构,这也可能导致 `YEAR()` 函数调用失败。 ### 示例:正确使用 `YEAR()` 提取年份 以下是在不同数据库系统中提取年份的典型示例: #### MySQL ```sql SELECT YEAR(order_date) AS order_year FROM orders; ``` #### SQL Server ```sql SELECT YEAR(order_date) AS order_year FROM orders; ``` #### Oracle ```sql SELECT EXTRACT(YEAR FROM order_date) AS order_year FROM orders; ``` #### PostgreSQL ```sql SELECT EXTRACT(YEAR FROM order_date) AS order_year FROM orders; ``` ### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值