mysql类型和javascript_MySQL的datetime类型在web端生成javascript的Date对象

服务端读取Comment表并将结果集返回给调用者,调用者使用json.dumps将结果集转成json字符串列表返回给WEB前端。datetime字段dumps之后变成描述日期的字符串,例如'2012-4-1 12:31:01' JS无法操作这个日期,例如在该时间的基础上加减N天或者N个小时,再比如对两个时间进行比较。找出较早的时间,所以服务端先把datetime转成bigint,再传给客户端(如果是日期是MYSQL的timestamp类型就不需要转换,因为timestamp就是bigint)

#webpy框架import web,time,datetime

def getList(self,db,noteId):

try:

sql = "SELECT * FROM Comment where noteId=$noteId"

rs = db.query(sql,vars=locals()).list()

for r in rs:

if r.postTime == None:

r.postTime = 0

continue

r.postTime = int(time.mktime(r.postTime.timetuple()))

d = time.localtime(r.postTime)

s = time.strftime('%Y-%m-%d %H:%M:%S', d)

return rs

except:

raise

JS的Date对象构造函数有多个重载版本,有一个版本可以根据int类型描述的时间生成Date对象(自1970年以来的微秒数,0就是1970-1-1 08:00:00 0000),不过datetime存的是1970以后的秒数,因此初始化时还需要*1000。

服务端使用的时间是标准时区,客户端还需要根据本地时区对服务端的时间做矫正,例如北京时间的10:00提交了一个评论到服务器,这个时间是标准时间的02:00,所以服务器存的也是02:00,从服务器直接读回来就不是用户提交时的本地时间,用户就会觉得奇怪,因此WEB端使用JS去读取用户时区,根据用户所在时区和标准时区的差来矫正结果,例如北京时间就需要在数据库时间上+8个小时,还原到用户提交时的本地时间。

/*JavaScript允许通过prototype扩展标准库对象的方法,该函数就是给Date对象增加一个format方法,该方法根据用户的参数描述的时间格式返回一个字符串

var d = new Date();

s=d.format("yyyy-MM-dd HH:mm:ss");

alert(s);*/

Date.prototype.format=function(fmt) {

var o = {

"M+" : this.getMonth()+1, //月份 "d+" : this.getDate(), //日 "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时 "H+" : this.getHours(), //小时 "m+" : this.getMinutes(), //分 "s+" : this.getSeconds(), //秒 "q+" : Math.floor((this.getMonth()+3)/3), //季度

"S" : this.getMilliseconds() //毫秒 };

var week = {

"0" : "\u65e5",

"1" : "\u4e00",

"2" : "\u4e8c",

"3" : "\u4e09",

"4" : "\u56db",

"5" : "\u4e94",

"6" : "\u516d"

};

if(/(y+)/.test(fmt)){

fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));

}

if(/(E+)/.test(fmt)){

fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "\u661f\u671f" : "\u5468") : "")+week[this.getDay()+""]);

}

for(var k in o){

if(new RegExp("("+ k +")").test(fmt)){

fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));

}

}

return fmt;

}

function convertUTCTolocalTime(serverTime)

{

var d = new Date();

//getTimezoneOffset()可以取得JS运行环境的时区和标准时区的分钟差 var localZone = d.getTimezoneOffset();

serverTime = parseInt(serverTime)

if(serverTime == 0)

return ""

if(localZone == 0)

{

//服务器存的时间是秒需要*1000变成微秒 return new Date(parseInt(serverTime)*1000).format("yyyy-MM-dd HH:mm:ss")

}

if(localZone < 0)

{

localZone = Math.abs(localZone);

localTime = new Date(parseInt(serverTime)*1000).valueOf();

//标准时间 + (1000 * 60 是1分钟 * 偏差分钟数) == JS环境的本地时间 localTime = localTime + (1000 * 60 * localZone);

return new Date(localTime).format("yyyy-MM-dd HH:mm:ss")

}

if(localZone > 0)

{

localZone = Math.abs(localZone);

localTime = new Date(parseInt(serverTime)*1000).valueOf();

//标准时间 - (1000 * 60 是1分钟 * 偏差分钟数) == JS环境的本地时间 localTime = localTime - (1000 * 60 * localZone);

return new Date(localTime).format("yyyy-MM-dd HH:mm:ss")

}

return "tntime.js: convertUTCTolocalTime has error"

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Layui使用`laydate`选择日期后,可以将其转换为MySQL的`datetime`类型的格式。可以通过Layui提供的`laydate`的回调函数来进行转换。 以下是一个示例代码,展示了如何将`laydate`选择的日期转换为MySQL的`datetime`类型的格式: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Layui - laydate转换为MySQLdatetime类型</title> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/layui/2.6.8/css/layui.min.css"> </head> <body> <div class="layui-form-item"> <label class="layui-form-label">选择日期</label> <div class="layui-input-block"> <input type="text" class="layui-input" id="dateInput"> </div> </div> <script src="https://cdn.bootcdn.net/ajax/libs/layui/2.6.8/layui.min.js"></script> <script> layui.use(['laydate', 'jquery'], function(){ var laydate = layui.laydate; var $ = layui.jquery; // 渲染日期选择器 laydate.render({ elem: '#dateInput', type: 'datetime', done: function(value){ // 将laydate选择的日期转换为MySQLdatetime类型 var mysqlDateTime = value.replace('T', ' '); // 替换T为空格 console.log(mysqlDateTime); // 如果需要将转换后的datetime发送给后保存,则可以使用ajax发送请求 /* $.ajax({ url: 'your_backend_url', type: 'POST', data: { datetime: mysqlDateTime }, success: function(response){ // 请求成功的处理 }, error: function(xhr, status, error){ // 请求失败的处理 } }); */ } }); }); </script> </body> </html> ``` 在上述代码,通过`laydate.render`方法渲染日期选择器,并通过`type: 'datetime'`设置日期选择器的类型为日期时间。 在`done`回调函数,可以获取到`laydate`选择的日期时间值。然后,使用JavaScript字符串函数的`replace`方法将字符串的T替换为空格,从而得到MySQL的`datetime`类型的格式。你可以根据需要进行后续处理,比如发送给后进行保存。 请注意,在实际使用,你需要将示例代码的`your_backend_url`替换为你的后接口地址,并根据实际情况进行请求处理。同时,确保引入了Layui的相关资源文件,并正确初始化了Layui组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值