PHP日期闰年加减,asp/sqlserver关于日期加减 PHP日期计算

天气热了,今天还在大太阳下,下起了大雨,少见了!做在我的老电脑面前也变的更闷了。768M的内存也开始变得不兼容了,起动了三次才好不容易启动了。现在速度也慢多了,而时不是有假死的情况,一会才能恢复。祸不单行,服务器由于断电导致时间也不准了,变成了2005-1-1了。使得数据库很多插入的时间也错了,没办法尊重事实,尽可能的把数据改回来。这里用到了时间的计算,也SQL文更新表操作。

ASP为我们提供了日期加减的函数,来帮我们解决这一问题。

1.日期相加

DateAdd 函数

返回已添加指定时间间隔的日期。

DateAdd(interval, number, date)

DateAdd 函数的语法有以下参数

(1)interval 必选项。字符串表达式,表示要添加的时间间隔。有关数值,请参阅“设置”部分。

(2)number 必选项。数值表达式,表示要添加的时间间隔的个数。数值表达式可以是正数(得到未来的日期)或负数(得到过去的日期)。

(3)date   必选项。Variant 或要添加 interval 的表示日期的文字。

设置

interval 参数可以有以下值:

设置  描述

yyyy  年

q   季度

m   月

y   一年的日数

d   日

w   一周的日数

ww   周

h   小时

n   分钟

s   秒

说明

可用 DateAdd 函数从日期中添加或减去指定时间间隔。例如可以使用 DateAdd 从当天算起 30 天以后的日期或从现在算起 45 分钟以后的时间。要向 date 添加以“日”为单位的时间间隔,可以使用“一年的日数”(“y”)、“日”(“d”)或“一周的日数”(“w”)。

DateAdd 函数不会返回无效日期。如下示例将 95 年 1 月 31 日加上一个月:

NewDate = DateAdd("m", 1, "31-Jan-95")

在这个示例中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 为 96 年 1 月 31 日,则返回 96 年 2 月 29 日,这是因为 1996 是闰年。

如果计算的日期是在公元 100 年之前,则会产生错误。

如果 number 不是 Long 型值,则在计算前四舍五入为最接近的整数。

2.日期相减

DateDiff 函数

返回两个日期之间的时间间隔。

DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])

DateDiff 函数的语法有以下参数:

(1)interval  必选项。字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔。有关数值,请参阅“设置”部分。

(2)date1, date2  必选项。日期表达式。用于计算的两个日期。

(3)Firstdayofweek  可选项。指定星期中第一天的常数。如果没有指定,则默认为星期日。有关数值,请参阅“设置”部分。

(4)Firstweekofyear  可选项。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。有关数值,请参阅“设置”部分。

设置

interval 参数可以有以下值:

设置   描述

yyyy   年

q     季度

m     月

y     一年的日数

d     日

w     一周的日数

ww     周

h     小时

n     分钟

s     秒

firstdayofweek 参数可以有以下值:

常数      值          描述

vbUseSystem    0     使用区域语言支持 (NLS) API 设置。

vbSunday       1        星期日(默认)

vbMonday      2        星期一

vbTuesday     3       星期二

vbWednesday    4        星期三

vbThursday     5       星期四

vbFriday      6       星期五

vbSaturday     7       星期六

firstweekofyear 参数可以有以下值:

常数      值          描述

vbUseSystem    0     使用区域语言支持 (NLS) API 设置。

vbFirstJan1    1     由 1 月 1 日所在的星期开始(默认)。

vbFirstFourDays  2     由在新年中至少有四天的第一周开始。

vbFirstFullWeek  3     由在新的一年中第一个完整的周开始。

说明

DateDiff 函数用于判断在两个日期之间存在的指定时间间隔的数目。例如可以使用 DateDiff 计算两个日期相差的天数,或者当天到当年最后一天之间的星期数。

要计算 date1 和 date2 相差的天数,可以使用“一年的日数”(“y”)或“日”(“d”)。当 interval 为“一周的日数”(“w”)时,DateDiff 返回两个日期之间的星期数。如果 date1 是星期一,则 DateDiff 计算到 date2 之前星期一的数目。此结果包含 date2 而不包含 date1。如果 interval 是“周”(“ww”),则 DateDiff 函数返回日历表中两个日期之间的星期数。函数计算 date1 和 date2 之间星期日的数目。如果 date2 是星期日,DateDiff 将计算 date2,但即使 date1 是星期日,也不会计算 date1。

如果 date1 晚于 date2,则 DateDiff 函数返回负数。

firstdayofweek 参数会对使用“w”和“ww”间隔符号的计算产生影响。

如果 date1 或 date2 是日期文字,则指定的年度会成为日期的固定部分。但是如果 date1 或 date2 被包括在引号 (" ") 中并且省略年份,则在代码中每次计算 date1 或 date2 表达式时,将插入当前年份。这样就可以编写适用于不同年份的程序代码。

在 interval 为“年”(“yyyy”)时,比较 12 月 31 日和来年的 1 月 1 日,虽然实际上只相差一天,DateDiff 返回 1 表示相差一个年份。

有了理论后,开始实践:

1、用ASP计算出到现在差了多少时间,并输出:

a = DateDiff("d","2005-1-1 8:30:50",   Now)

b = DateAdd("d",1280,"2005-1-1 8:30:50") ' 是还原,看加的是不是正确

response.write a &"----"&b

%>

2、SQL更新表记录:

update zhoz_com_date set reg_date=expire_date+1280 where Year(reg_date)

23:28 2008-7-10 PHP日期计算的补充:

刚才写东西,遇到了PHP中关于日期计算,也一起补充进来。

其实很简单有个PHP函数:strtotime

可以任意加减年、月、日,例子:

echo date("Y-m-d",strtotime("+3 day"));

// 输出:2008-07-13

echo date("Y-m-d",strtotime("+3 month"));

// 输出:2008-10-10

echo date("Y-m-d",strtotime("+3 year"));

// 输出:2011-07-10

很强大!!记住以后得多熟悉函数,如果不知道这个函数写方法的话,要写很多东西。处理也麻烦。

/*

* 指定两个时间段,返回不同的时间数

* $interval:只允许intervals有以下五个值:"w"(周)、"d"(天)、"h"(小时)、"n"(分钟) 和"s"(秒)

* $date1 通常为当前时间;

* $date2 需要计算的时间;

* zhoz.com 0:34 2008-7-13

*/

function DateDiff ($interval = "d", $date1,$date2) {

// 得到两日期之间间隔的秒数

$timedifference = strtotime($date2) - strtotime($date1);

switch ($interval) {

case "w": $retval = bcdiv($timedifference ,604800); break;

case "d": $retval = bcdiv( $timedifference,86400); break;

case "h": $retval = bcdiv ($timedifference,3600); break;

case "n": $retval = bcdiv( $timedifference,60); break;

case "s": $retval = $timedifference; break;

}

return $retval;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 C 语言实现日期的示例代码: ```c #include <stdio.h> #include <stdlib.h> struct Date { int year; int month; int day; }; // 计算一个月有多少天 int days_in_month(int year, int month) { switch (month) { case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 29; } else { return 28; } case 4: case 6: case 9: case 11: return 30; default: return 31; } } // 计算日期上指定天数后的日期 struct Date add_days(struct Date date, int days) { while (days > 0) { int days_in_month = days_in_month(date.year, date.month); if (date.day + days > days_in_month) { days -= days_in_month - date.day + 1; date.day = 1; if (date.month == 12) { date.year++; date.month = 1; } else { date.month++; } } else { date.day += days; break; } } return date; } // 计算日期去指定天数后的日期 struct Date sub_days(struct Date date, int days) { while (days > 0) { if (date.day - days < 1) { days -= date.day - 1; if (date.month == 1) { date.year--; date.month = 12; } else { date.month--; } date.day = days_in_month(date.year, date.month); } else { date.day -= days; break; } } return date; } int main() { struct Date date = {2021, 3, 15}; printf("原始日期:%d年%d月%d日\n", date.year, date.month, date.day); struct Date new_date = add_days(date, 10); printf("上10天后的日期:%d年%d月%d日\n", new_date.year, new_date.month, new_date.day); new_date = sub_days(date, 10); printf("去10天后的日期:%d年%d月%d日\n", new_date.year, new_date.month, new_date.day); return 0; } ``` 在这个示例代码中,我们定义了一个 `struct Date` 结构体来表示日期,其中包含年、月、日三个字段。 我们使用 `days_in_month` 函数来计算一个月有多少天。这个函数会根据年份和月份来判断每个月有多少天,考虑闰年和平年的情况。 我们使用 `add_days` 函数来计算日期上指定天数后的日期。这个函数会循环遍历每一天,直到指定天数为 0,每次循环都会判断当前月份是否已经超过了这个月的最大天数,如果超过了,就将月份 1,将日期重置为 1。如果月份已经是 12 月了,就将年份 1,月份重置为 1。 我们使用 `sub_days` 函数来计算日期去指定天数后的日期。这个函数的实现和 `add_days` 函数类似,只是每次循环都会判断当前日期是否已经小于 1,如果小于 1,就将月份 1,将日期重置为上个月的最大天数。如果月份已经是 1 月了,就将年份 1,月份重置为 12。 在 `main` 函数中,我们定义了一个初始日期,然后分别调用 `add_days` 和 `sub_days` 函数来计算上和去指定天数后的日期,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值