一些团购网的倒计时如何在服务器端实现?

我是翔子 2010-09-19 10:58:37
比如现在一些较为流行的团购网,糯米。拉手这样的,每个商品都有一个倒计时结束的效果,前台的倒计时是js脚本实现的,当时间为0的时候刷新一下页面,但是当刷新的时候,下一单新产品就已经发布了,说明他们在服务器端是不是也有个定时的方法啊,这个该怎么实现啊
...全文
1576 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
malingsq 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xiangmei521 的回复:]
我不是说前台js脚本该怎么弄,而是在商品刚一发布的时候,后台该怎么办?
[/Quote]

其实连页面都不刷都可以做到
if(Math.floor(time)<=0){
时用JS调webservice里的方法重新生成新的html.
我是翔子 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zthsn 的回复:]
用JS写到计时的脚本 当时间到0的时候提交页面 往后台发送一个POST请求 后台接受到这个请求后就会执行相应的操作
[/Quote]

我看其他的一些网站,并没有发送post请求,前台的js仅仅是刷新了一下页面,所以我认为应该是后台也有一个定时的方法,在时间到了的时候,自动生成下一个商品的页面,覆盖掉原来的页面
我是翔子 2010-09-19
  • 打赏
  • 举报
回复
我不是说前台js脚本该怎么弄,而是在商品刚一发布的时候,后台该怎么办?
dhttaso 2010-09-19
  • 打赏
  • 举报
回复
//以下内容不是回复楼主问题

public static void ToGrade(InPageAction IN, OutPageAction OUT)
{
if (OUT.Break || IN.ActionName != "tograde")
{
return;
}
uint moduleID = 0;
uint infoID = 0;
uint point = 0;
uint nodeID = 0;
string tableName = "WB_U_Comment";
IN.Page.HttpContext.GetRequest(ref moduleID, "infotypeid");
IN.Page.HttpContext.GetRequest(ref infoID, "infoid");
IN.Page.HttpContext.GetRequest(ref point, "point");
IN.Page.HttpContext.GetRequest(ref nodeID, "nodeid");
string ip = IN.Page.HttpContext.Context.Request.UserHostAddress.ToString();
string result = "2"; //2 查询 1 评分 0 失败
try
{
WB_Info wbInfo = new WB_Info();
wbInfo.TableName = tableName;
wbInfo.Connection = IN.Page.Connection;
if (point > 0)
{
if (!wbInfo.TrySelectFirstRow(new string[] { "InfoID" }, "ModuleID = '" + moduleID + "' and NewsID ='" + infoID + "' and IpAddress = '" + ip + "' and datediff('d',CreateDate,'" + DateTime.Now.ToString() + "')=0", "InfoID"))
{
//当天同个IP如果已经评分,将不再评分
wbInfo.Insert(new string[] { "ModuleID", "NewsID", "NodeID", "Point", "State", "TopIndex", "CreateDate", "IpAddress" }, new string[]{IN.Page.Connection.FormatTextFieldValue(moduleID.ToString()),
IN.Page.Connection.FormatTextFieldValue(infoID.ToString()),IN.Page.Connection.FormatIntFieldValue(nodeID.ToString()),IN.Page.Connection.FormatTextFieldValue(point.ToString()),
IN.Page.Connection.FormatIntFieldValue(0),IN.Page.Connection.FormatIntFieldValue(0),IN.Page.Connection.FormatDateFieldValue(DateTime.Now.ToString()),IN.Page.Connection.FormatTextFieldValue(ip)});
result = "1";
}
}
//得到当前评分
string avgPointSql = LC.Data.SelectValue.CreateAvgSqlString(IN.Page.Connection, tableName, "Point", "ModuleID = '" + moduleID + "' and NewsID ='" + infoID + "'");
string avgPoint = LC.Data.SelectValue.Execute(IN.Page.Connection, avgPointSql);
if (avgPoint.Length > 4)
{
avgPoint = avgPoint.Substring(0, 4);
}
else if (string.IsNullOrEmpty(avgPoint))
{
avgPoint = "0";
}
//得到当前参与评分人数
string gradeNumSql = LC.Data.SelectValue.CreateCountSqlString(IN.Page.Connection, tableName, "InfoID", "ModuleID = '" + moduleID + "' and NewsID ='" + infoID + "'");
string gradeNum = LC.Data.SelectValue.Execute(IN.Page.Connection, gradeNumSql);
OUT.Message = "[" + result + "," + avgPoint + "," + gradeNum + "]";
}
catch (Exception ex)
{
result = "0";
OUT.Message = "[" + result + ",0," + ex.Message + "]";
}
}
zthsn 2010-09-19
  • 打赏
  • 举报
回复
用JS写到计时的脚本 当时间到0的时候提交页面 往后台发送一个POST请求 后台接受到这个请求后就会执行相应的操作
ashou706 2010-09-19
  • 打赏
  • 举报
回复
后台肯定还是有服务在运行,不断更新数据库,前台定时刷新页面,在刷新间隔期间的倒计时用js 实现。
我的理解
老Key 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 malingsq 的回复:]
JScript code

团购网的出现大大的带动了ecshop网店市场,与时俱进的功能也层出不穷也带动了ecshop二次开发技术,很多客户需要倒计时代码,今天就和大家分享ecshop开发之如何实现团购网倒计时功能,以此来增加顾客购物热情和欲望。

代码不难,大致分为三部分,获取当前时间,开始倒计时,提交。

1.计算剩余时间的函数:
function countDown(){ ……
[/Quote]很好很强大
malingsq 2010-09-19
  • 打赏
  • 举报
回复
查了个php的因为你说会刷新我就想了个办法.
if(Math.floor(time)<=0){

时间.innerHTML='抢购时间已过,谢谢您的关注!';
不是有这句么.同时刷新了页面.
也就是说在刷新时在后置代码.cs中找到现在是不是这句,如果是就重新给JS中的新的数据.
malingsq 2010-09-19
  • 打赏
  • 举报
回复

团购网的出现大大的带动了ecshop网店市场,与时俱进的功能也层出不穷也带动了ecshop二次开发技术,很多客户需要倒计时代码,今天就和大家分享ecshop开发之如何实现团购网倒计时功能,以此来增加顾客购物热情和欲望。

代码不难,大致分为三部分,获取当前时间,开始倒计时,提交。

1.计算剩余时间的函数:
function countDown(){

var i;

var objArray =document.getElementsByTagName("label");

//alert(objArray.length);

for (i=0;i<(objArray.length);i++)

{


if (objArray[i].id.indexOf("article_")>-1)

{

objHid = document.getElementById("hid_article_" + objArray[i].id.substring(objArray[i].id.indexOf("_")+1));

//objHid.value就是对应的时间值,然后改下面就行了

var d=Date.parse(objHid.value);

var today=new Date();

var time=d-today;


var 时间=objArray[i];

if(Math.floor(time)<=0){

时间.innerHTML='抢购时间已过,谢谢您的关注!';

}

else
时间没有过,就开始计算距离到期日的时间
{

var 天=Math.floor(time/(1000*60*60*24));

var 小时=Math.floor(time/(1000*60*60))%24;

var 分=Math.floor(time/(1000*60))%60;

var 秒=Math.floor(time/1000)%60;

时间.innerHTML=天+' 天'+小时+'小时'+分+'分'+秒+'秒';

时间.style.fontSize='14px';

}

}

}


2.当然在计时函数之前必须知道当前时间,月份、小时、分、秒


index.php

/** 将GMT时间戳格式化为用户自定义时区日期

*

*

* @param string $format

* @param integer $time 该参数必须是一个GMT的时间戳

*

* @return string

*/


function local_date($format, $time = NULL)

{

$timezone = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $GLOBALS['_CFG']['timezone'];


if ($time === NULL)

{

$time = gmtime();

}

elseif ($time <= 0)

{

return '';

}


$time += ($timezone * 3600);


return date($format, $time);

}



function chagetime($time)

{

$time = local_date($GLOBALS['_CFG']['time_format'], $time);

//echo $time;exit;

$time = explode(" ",$time);//分割时间

$date = $time[0];

$time=$time[1];

$date=explode("-",$date);

$year = (int)$date[0];

$month = (int)$date[1];

$day = (int)$date[2];

/*$time=explode(":",$time);

$hour =$time[0];

$min =$time[1];

$sec =(int)$time[2];

$hour = (int)(24-$hour);

$min =(int)(60-$min);

$time=$hour.":".$min.":".$sec;*/

switch ($month) 这里是显示月份的函数

{

case 1:

$month_name = "Jan";

break;

case 2:

$month_name = "Feb";

break;

case 3:

$month_name = "Mar";

break;

case 4:

$month_name = "Apr";

break;

case 5:

$month_name = "May";

break;

case 6:

$month_name = "Jun";

break;

case 7:

$month_name = "Jul";

break;

case 8:

$month_name = "Aug";

break;

case 9:

$month_name = "Sep";

break;

case 10:

$month_name = "Oct";

break;

case 1:

$month_name = "Nov";

break;

case 2:

$month_name = "Dec";

break;

}

return $month_name." ".$day." ".$year." ".$time; 返回时间值

}

3.这样就基本上完成了,最后输出值就可以了

setTimeout('countDown()',1000);

}

countDown();

</script>


<label id='article_1'></label><input type='hidden' id='hid_article_1' value='<?php echo chagetime(time());?>' />

zjsszp 2010-09-19
  • 打赏
  • 举报
回复
我也想学下
BATTLERxANGE 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhang_zhen1234 的回复:]

是不是为零的时候 给服务器信息 让那个商品显示出来
[/Quote]

说话不经过大脑的人……
kkbac 2010-09-19
  • 打赏
  • 举报
回复
服务器只需要设置一个过期时间和当前时间比较就行了.
我是翔子 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhang_zhen1234 的回复:]
是不是为零的时候 给服务器信息 让那个商品显示出来
[/Quote]
没,我看了,那个JS脚本纯粹的是倒计时为0的时候刷新了一下页面~~
zhang_zhen1234 2010-09-19
  • 打赏
  • 举报
回复
是不是为零的时候 给服务器信息 让那个商品显示出来
newdigitime 2010-09-19
  • 打赏
  • 举报
回复
既然你是刷新一下页面,那就表示客户端向服务器端重新发出一个请求.

后台得到请求,读取数据库
数据库中对每一单都应该有一个开始的时间字段.
譬如A单是9:00结束,其后紧排着B单,B单当然是9:00开始.
你说的上一单A单倒计时为0时,当然就是9:00了,也就B单开始 ,后台读取数据时,
可以在SQL语句中判断 select top 1 * where stime<=now
我是翔子 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lqkankan 的回复:]
引用 13 楼 xiangmei521 的回复:
引用 10 楼 zthsn 的回复:
用JS写到计时的脚本 当时间到0的时候提交页面 往后台发送一个POST请求 后台接受到这个请求后就会执行相应的操作


我看其他的一些网站,并没有发送post请求,前台的js仅仅是刷新了一下页面,所以我认为应该是后台也有一个定时的方法,在时间到了的时候,自动生成下一个商品的页面,覆盖掉原来的页面

……
[/Quote]

后台按照销售时间挂网做?挂网是什么意思?

lqkankan 2010-09-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xiangmei521 的回复:]
引用 10 楼 zthsn 的回复:
用JS写到计时的脚本 当时间到0的时候提交页面 往后台发送一个POST请求 后台接受到这个请求后就会执行相应的操作


我看其他的一些网站,并没有发送post请求,前台的js仅仅是刷新了一下页面,所以我认为应该是后台也有一个定时的方法,在时间到了的时候,自动生成下一个商品的页面,覆盖掉原来的页面
[/Quote]

每个商品 都有他的 时间范围~ 一单接一单

一般新的一单都是在 凌晨开始 每一单基本上都是 到 23:59:59 结束

后台只是 按照 单子的 销售时间 挂网~ 来做的... 一天一单就是 当天读取时间段为当天的单子数据而已..

时间读秒 就是简单的 当前客户端时间 - 单子结束时间 = 多少多少秒 然后 做个时间显示的函数就行了
内容概要:本文聚焦于双层优化方法在综合能源系统(IES)中的应用,系统研究了容量配置与运行调度的协同优化问题。通过构建上层以最小化投资成本为目标的容量配置模型和下层以最小化运行成本为目标的运行调度模型,实现了系统经济性与可靠性的综合平衡。研究采用Matlab进行模型编程与仿真,结合鲸鱼优化算法、遗传算法等智能优化算法求解复杂的非线性双层规划问题,并充分考虑了可再生能源出力的不确定性、负荷波动等实际运行约束。同时,为进一步提升模型的鲁棒性与实用性,研究还融合了分布鲁棒优化、多场景分析等先进方法,增强了对不确定因素的应对能力。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员和工程技术人员,特别适用于从事综合能源系统规划、微电网设计、可再生能源集成与能源互联网等前沿领域研究的专业人士。; 使用场景及目标:① 深入掌握双层优化架构在能源系统长期规划与短期调度中的建模逻辑与实现技巧;② 学习并实践利用Matlab平台搭建复杂能源系统优化模型的全流程方法;③ 为开展相关领域的学术研究、撰写学位论文或实施实际工程项目提供高价值的、可复现的技术方案与代码参考。; 阅读建议:此资源以Matlab代码实现为核心载体,建议读者在透彻理解其数学模型与优化原理的基础上,结合所提供的源代码进行逐行调试与仿真分析,从而深刻把握算法的实现细节与参数设置技巧,并鼓励将所学方法迁移拓展至其他类似的能源系统优化问题中进行验证与创新。

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧