在任意HTML页面中获取客户端当前时间(最常用)
这是最常见的需求,比如在页脚显示“今天是2025年10月27日”,或者在页面上动态显示一个时钟,这种时间是从用户浏览器获取的,即客户端时间。

实现方法: 直接编写JavaScript代码即可,不需要与织梦后台产生任何交互。
示例1:在页脚显示静态的当前日期
你可以在你的模板文件(如 footer.htm)中,直接加入以下JS代码。
<script>
// 创建一个新的 Date 对象
var now = new Date();
// 获取年、月、日
var year = now.getFullYear();
// getMonth() 返回 0-11,所以需要 +1
var month = now.getMonth() + 1;
var day = now.getDate();
// 为了格式统一,可以在个位数前补0
month = month < 10 ? '0' + month : month;
day = day < 10 ? '0' + day : day;
// 拼接成你想要的格式
var formattedDate = year + '年' + month + '月' + day + '日';
// 将时间写入到页面中某个元素里
// 假设你的页脚有个 id 为 "current-date" 的 <span> 标签
document.getElementById('current-date').innerText = formattedDate;
</script>
<!-- 在你的HTML模板中放置一个用来显示时间的元素 -->
<footer>
<p>今天是 <span id="current-date"></span></p>
</footer>
示例2:在页面上显示一个动态走动的时钟
这个例子会每秒更新一次时间,看起来像一个时钟。
<script>
function updateTime() {
var now = new Date();
var hours = now.getHours();
var minutes = now.getMinutes();
var seconds = now.getSeconds();
// 补零操作
hours = hours < 10 ? '0' + hours : hours;
minutes = minutes < 10 ? '0' + minutes : minutes;
seconds = seconds < 10 ? '0' + seconds : seconds;
var timeString = hours + ':' + minutes + ':' + seconds;
// 更新页面元素内容
document.getElementById('clock').innerText = timeString;
}
// 首先立即执行一次,避免等待1秒
updateTime();
// 然后每1000毫秒(1秒)执行一次 updateTime 函数
setInterval(updateTime, 1000);
</script>
<!-- 在你的HTML模板中放置一个时钟显示元素 -->
<div>当前时间:<span id="clock"></span></div>
获取织梦CMS发布文章的时间(服务器时间)
你可能需要在JS中使用某篇文章的发布时间、更新时间等,这个时间是服务器时间,比客户端时间更可靠,因为用户可能会修改自己电脑的时间。

实现方法:
在织梦的模板文件(如 article_article.htm)中,通过织梦的模板标签 {dede:field} 将PHP的时间变量传递给JavaScript。
示例:获取并格式化文章的发布时间
假设你想在文章页面用JS处理文章的发布时间,比如计算发布至今有多少天了。
步骤1:在模板中准备数据
在你的文章详情页模板文件(通常是 /templets/default/article_article.htm)中,找到 <head> 标签内部,加入以下代码,这里我们将织梦的发布时间 (pubdate) 以JSON格式传递给JS,这样JS可以直接使用。

<head>
... 其他head内容 ...
<script>
// 使用织梦模板标签获取文章的发布时间(Unix时间戳)
// {dede:field.pubdate /} 会输出文章发布时的时间戳
var articlePubDateTimestamp = {dede:field.pubdate /};
// 如果你需要更新时间,可以使用 {dede:field.updatetime /}
// var articleUpdateTimeTimestamp = {dede:field.updatetime /};
</script>
</head>
重要提示:{dede:field.pubdate /} 输出的是Unix时间戳(一个10位或13位的数字),这是JS最擅长处理的时间格式。
步骤2:在页面其他地方使用这个时间
现在你可以在页面任何地方的 <script> 标签里使用 articlePubDateTimestamp 这个变量了。
<body>
<h1>{dede:field.title/}</h1>
<!-- 用PHP直接显示时间(传统方式) -->
<p>发布时间(PHP):{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/}</p>
<!-- 用JS处理和显示时间 -->
<p>发布时间(JS处理):<span id="js-pubdate"></span></p>
<p>距离今天已经过去:<span id="days-ago"></span> 天</p>
<script>
// 这里的 articlePubDateTimestamp 变量来自上面的 <head> 部分
// 创建一个 Date 对象,时间戳的单位是毫秒,所以如果服务器给的是10位时间戳,需要 * 1000
// 织梦通常给出的是10位时间戳
var pubDate = new Date(articlePubDateTimestamp * 1000);
// 格式化成可读字符串
var formattedPubDate = pubDate.getFullYear() + '-' +
(pubDate.getMonth() + 1) + '-' +
pubDate.getDate();
// 显示格式化后的发布时间
document.getElementById('js-pubdate').innerText = formattedPubDate;
// 计算距离今天过去的天数
var now = new Date();
var timeDiff = now.getTime() - pubDate.getTime(); // 毫秒差
var daysDiff = Math.floor(timeDiff / (1000 * 3600 * 24)); // 转换为天数
document.getElementById('days-ago').innerText = daysDiff;
</script>
</body>
在JS中调用织梦的PHP接口获取时间(高级)
这是一种更灵活的方法,如果你的时间数据不是来自当前页面(比如想获取最新文章的发布时间),你可以通过织梦的 arclist 或 list 标签配合JS来实现,或者调用一个自定义的PHP接口。
方法A:使用织梦的 {dede:arclist}
<script>
// 使用织梦的 arclist 标签获取最新文章的时间,并隐藏输出
// 我们只关心它的 JS 数据
{dede:arclist row='1' channelid='1' typeid='0'}
// 'function="js"' 会将数据格式化为JS对象
// 我们只取 pubdate
var latestArticleTime = "[field:pubdate function='js']";
{/dede:arclist}
// latestArticleTime 现在是一个JS可用的字符串,"1698384000"
// 你可以像场景二一样处理它
if(latestArticleTime){
var latestDate = new Date(latestArticleTime * 1000);
console.log('最新文章发布时间:', latestDate.toLocaleDateString());
}
</script>
注意:这种方法有一定局限性,arclist 的数据量不宜过大,否则会影响页面加载速度。
总结与推荐
| 场景 | 时间来源 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|---|
| 显示当前日期/时钟 | 客户端浏览器 | 纯JS代码 | 简单、快速、不依赖服务器 | 时间可能被用户篡改 |
| 处理文章发布时间 | 服务器 | 织梦标签 + JS | 时间准确、可靠,与内容强相关 | 需要修改模板文件 |
| 获取动态/非当前页时间 | 服务器 | arclist标签 + JS 或 自定义API |
灵活,可获取任意数据 | 实现稍复杂,可能影响性能 |
对于绝大多数情况,场景一和场景二已经足够满足需求,请根据你的具体需求选择合适的方法。
