在ASP开发中,时间格式处理是常见需求,无论是显示当前时间、格式化数据库中的日期字段,还是进行时间计算,都离不开对时间格式的掌握,ASP主要依赖VBScript的日期时间函数来实现时间格式化,本文将详细介绍ASP中时间格式相关的核心函数、格式化方法、常见场景及注意事项。

ASP内置日期时间函数
VBScript提供了多个内置函数用于获取和操作时间,这些函数是时间格式化的基础:
Now()
返回当前系统日期和时间,包含日期和时间部分,格式为“yyyy-mm-dd hh:mm:ss”(具体显示受Locale影响)。<%=Now()%>可能输出2023-10-15 14:30:25。Date()
仅返回当前系统日期,时间部分默认为00:00:00。<%=Date()%>输出2023-10-15。Time()
仅返回当前系统时间,日期部分默认为1899-12-30(VBScript的日期基准日)。<%=Time()%>输出14:30:25。Year()、Month()、Day()、Hour()、Minute()、Second()
分别从日期时间值中提取年、月、日、时、分、秒。<%=Year(Now())%>输出2023,<%=Month(Now())%>输出10。
FormatDateTime函数:标准格式化
FormatDateTime 函数是ASP中最常用的格式化函数,可将日期时间值转换为预定义的标准格式,语法为:FormatDateTime(Date[, NamedFormat])NamedFormat 参数可选,取值如下:

| NamedFormat 常量 | 值 | 说明 | 示例(Now()为2023-10-15 14:30:25) |
|---|---|---|---|
| vbGeneralDate | 0 | 默认格式:日期和时间(若时间部分为0则仅显示日期) | 2023-10-15 14:30:25 或 2023-10-15 |
| vbShortDate | 1 | 短日期格式(受系统Locale影响) | 2023/10/15(中文系统)或 10/15/2023(英文系统) |
| vbLongDate | 2 | 长日期格式(受系统Locale影响) | 2023年10月15日(中文)或 October 15, 2023(英文) |
| vbShortTime | 3 | 24小时制短时间格式 | 14:30 |
| vbLongTime | 4 | 24小时制长时间格式(含秒) | 14:30:25 |
示例:
<%=FormatDateTime(Now(), vbLongDate)%> ' 输出:2023年10月15日(中文系统) <%=FormatDateTime(Now(), vbShortTime)%> ' 输出:14:30
自定义时间格式:使用Format函数
当标准格式无法满足需求时,可通过 Format 函数实现自定义格式化,语法为:Format(Expression, [Format])
日期时间部分常用的格式化字符如下:
| 格式字符 | 说明 | 示例(Now()为2023-10-15 14:30:25) |
|---|---|---|
| yyyy | 4位年份 | 2023 |
| yy | 2位年份 | 23 |
| MM | 2位月份(01-12) | 10 |
| M | 1位或2位月份(1-12) | 10 |
| dd | 2位日期(01-31) | 15 |
| d | 1位或2位日期(1-31) | 15 |
| hh | 12小时制小时(01-12) | 02 |
| HH | 24小时制小时(00-23) | 14 |
| mm | 2位分钟(00-59) | 30 |
| m | 1位或2位分钟(0-59) | 30 |
| ss | 2位秒(00-59) | 25 |
| tt | 上午/下午标记(AM/PM) | PM |
示例:
<%=Format(Now(), "yyyy年MM月dd日 HH:mm:ss")%> ' 输出:2023年10月15日 14:30:25 <%=Format(Now(), "yy-M-d hh:mm tt")%> ' 输出:23-10-15 02:30 PM
常见时间格式场景示例
数据库日期时间格式化
从SQL Server等数据库读取datetime字段后,需转换为字符串显示。
<% Dim dbDate dbDate = "2023-10-15 14:30:25.123" ' 假设从数据库获取的值 ' 截取秒部分,忽略毫秒 Response.Write Format(CDate(dbDate), "yyyy-MM-dd hh:mm:ss") %> ' 输出:2023-10-15 02:30:25
时间戳转换
Unix时间戳是从1970-01-01 00:00:00开始的秒数,可通过 DateAdd 函数转换为VBScript日期:
<%
Dim timestamp, vbDate
timestamp = 1697355025 ' 示例时间戳
vbDate = DateAdd("s", timestamp, #1970-01-01 00:00:00#)
Response.Write Format(vbDate, "yyyy-MM-dd HH:mm:ss")
%>
' 输出:2023-10-15 14:30:25 计算并格式化未来时间
使用 DateAdd 函数计算未来时间,再格式化显示:

<%
Dim futureDate
futureDate = DateAdd("d", 7, Date()) ' 当前日期+7天
Response.Write "一周后日期:" & Format(futureDate, "yyyy年MM月dd日")
%>
' 输出:一周后日期:2023年10月22日 注意事项
Locale(区域设置)影响
ASP的日期格式受服务器Locale影响,如中文系统下vbShortDate可能显示2023/10/15,而英文系统显示10/15/2023,可通过Session.LCID修改,Session.LCID = 2052(中文)或1033(英文)。空值与无效日期处理
使用IsDate函数检查变量是否为有效日期,避免格式化错误:<% Dim testDate testDate = "2023-13-01" ' 无效日期 If IsDate(testDate) Then Response.Write Format(testDate, "yyyy-MM-dd") Else Response.Write "无效日期" End If %>24小时制与12小时制
Format函数中hh表示12小时制(需配合tt显示AM/PM),HH表示24小时制(无AM/PM)。
相关问答FAQs
问题1:ASP中如何将Unix时间戳转换为“yyyy-MM-dd HH:mm:ss”格式的日期?
解答:Unix时间戳是从1970-01-01 00:00:00开始的秒数,需通过 DateAdd 函数转换为VBScript日期,再用 Format 函数格式化,示例代码如下:
<%
Function ConvertTimestamp(timestamp)
Dim vbDate
vbDate = DateAdd("s", timestamp, #1970-01-01 00:00:00#)
ConvertTimestamp = Format(vbDate, "yyyy-MM-dd HH:mm:ss")
End Function
Dim timestamp
timestamp = 1697355025 ' 示例时间戳
Response.Write ConvertTimestamp(timestamp)
%>
' 输出:2023-10-15 14:30:25 问题2:为什么FormatDateTime函数显示的日期格式和预期不同?如何解决?
解答:FormatDateTime 函数的显示格式受服务器Locale(区域设置)影响,例如中文系统下 vbShortDate 可能显示 2023/10/15,而英文系统显示 10/15/2023,若需固定格式,可通过以下两种方式解决:
- 修改
Session.LCID:在页面开头设置Session.LCID = 2052(中文)或1033(英文)。 - 使用
Format函数自定义格式:直接通过Format(日期, "自定义格式")指定显示方式,避免受Locale影响。Format(Now(), "yyyy-MM-dd")始终输出2023-10-15,不受Locale影响。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复