function getUrlParam(param) { var params = Ext.urlDecode(location.search.substring(1)); return param ? params[param] : params; } function isEmptyObject(e) { var t; for (t in e) return !1; return !0 } function checkzimu(value) { var Regx = /^[a-z]*$/; if (Regx.test(value)) { return true; } else { return false; } } function CheckFileExt(extstr, exg) { var extstr = extstr.substring(extstr.lastIndexOf(".")).toLowerCase(); if (!extstr.match(exg)) { return false; } return true; } function DateToStr(dt){ var str=""; if(dt.getFullYear){ var y,m,d; y=formatNumber(dt.getFullYear(),'0000'); m=formatNumber((dt.getMonth()+1),'00'); //01-12 d=formatNumber(dt.getDate(),'00'); str= y+"-"+m+"-"+d; } return str; } function DateTimeToStr(dt){ var str=""; if(dt.getFullYear){ var y,m,d,h,mi,s; y=formatNumber(dt.getFullYear(),'0000'); m=formatNumber((dt.getMonth()+1),'00'); //01-12 d=formatNumber(dt.getDate(),'00'); h=formatNumber(dt.getHours(),'00'); mi=formatNumber(dt.getMinutes(),'00'); s=formatNumber(dt.getSeconds(),'00'); str= y+"-"+m+"-"+d+" "+h+":"+mi+":"+s; } return str; } function StrToDate(str){ var arys= new Array(); arys=str.split('-'); var newDate=new Date(arys[0],arys[1]-1,arys[2]); return newDate; } function getDays(strDateStart, strDateEnd) { var strSeparator = "-"; //日期分隔符 var oDate1; var oDate2; var iDays; oDate1 = strDateStart.split(strSeparator); oDate2 = strDateEnd.split(strSeparator); var strDateS = new Date(oDate1[0], oDate1[1] - 1, oDate1[2]); var strDateE = new Date(oDate2[0], oDate2[1] - 1, oDate2[2]); iDays = parseInt(Math.abs(strDateS - strDateE) / 1000 / 60 / 60 / 24)//把相差的毫秒数转换为天数 return iDays; } function getNewDay(dateTemp, days) { var dateTemp = dateTemp.split("-"); var nDate = new Date(dateTemp[1] + '-' + dateTemp[2] + '-' + dateTemp[0]); //转换为MM-DD-YYYY格式 var millSeconds = Math.abs(nDate) + (days * 24 * 60 * 60 * 1000); var rDate = new Date(millSeconds); var year = rDate.getFullYear(); var month = rDate.getMonth() + 1; if (month < 10) month = "0" + month; var date = rDate.getDate(); if (date < 10) date = "0" + date; return (year + "-" + month + "-" + date); } /* 数字格式化函数 “,” (半角的豆号) 如果有的话,看豆号到小数点(如果有的话)前有几位,则按几位划分整数部分 “0”(数字零) 如果该位上没有数字,就补0 “#”(井号) 如果该位上有数字就输出数字,没有则不输出 */ function formatNumber(number,pattern){ var str = number.toString(); var strInt; var strFloat; var formatInt; var formatFloat; if(/\./g.test(pattern)){ formatInt = pattern.split('.')[0]; formatFloat = pattern.split('.')[1]; }else{ formatInt = pattern; formatFloat = null; } if(/\./g.test(str)){ if(formatFloat!=null){ var tempFloat = Math.round(parseFloat('0.'+str.split('.')[1])*Math.pow(10,formatFloat.length))/Math.pow(10,formatFloat.length); strInt = (Math.floor(number)+Math.floor(tempFloat)).toString(); strFloat = /\./g.test(tempFloat.toString())?tempFloat.toString().split('.')[1]:'0'; }else{ strInt = Math.round(number).toString(); strFloat = '0'; } }else{ strInt = str; strFloat = '0'; } if(formatInt!=null){ var outputInt = ''; var zero = formatInt.match(/0*$/)[0].length; var comma = null; if(/,/g.test(formatInt)){ comma = formatInt.match(/,[^,]*/)[0].length-1; } var newReg = new RegExp('(\\d{'+comma+'})','g'); if(strInt.length0 && str.charAt(j-1)==" " ; j--) ; if(i>j) return ""; return str.substring(i,j); } function Billstrnum(str,len) { var result = ""; if (str == '') return result; var slist = str.split("\n"); for (var i = 0; i < slist.length; i += 1) { var member = slist[i]; if (member.length > len) { if (result=='') result = result + (i + 1) + '行'; else result = result+','+ (i + 1) + '行'; } } if (result != '') result = " 第" + result + '字符超过' + len + ""; return result; } function ExportExcel(gridPanel, formname, config) { if (formname == '') formname = '导出数据'; if (gridPanel) { var tmpStore = gridPanel.getStore(); var tmpExportContent = ''; if (!config) { config = { store: null, //因为后续可能需要处理分页,因此此处一般不直接传递GridPanel的数据源 title: formname, //需要显示标题 limit: 5000 }; } //以下处理分页grid数据导出的问题,从服务器中获取所有数据,需要考虑性能 var tmpParam = Ext.clone(tmpStore.lastOptions); //此处克隆了原网格数据源的参数信息 // if (tmpParam && tmpParam.params) { // delete (tmpParam.params[tmpStore.paramNames.start]); //删除分页参数 // delete (tmpParam.params[tmpStore.paramNames.limit]); // } if (tmpParam && tmpParam.params) { tmpStore.lastOptions.start = 0; tmpStore.lastOptions.limit = config.limit; } //var tmpAllStore = new Ext.data.Store({//重新定义一个数据源 // proxy: tmpStore.proxy, // reader: tmpStore.reader //}); var tmpAllStore = Ext.create('Ext.data.Store', { model: tmpStore.model, proxy: tmpStore.proxy }); tmpAllStore.on('load', function (store) { config.store = store; tmpExportContent = gridPanel.getExcelXml(false, config); //此方法用到了一中的扩展 if (Ext.isIE || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3 || Ext.isChrome) {//在这几种浏览器中才需要,IE8测试不能直接下载了 if (!Ext.fly('frmDummy')) { var frm = document.createElement('form'); frm.id = 'frmDummy'; frm.name = 'sheet1'; frm.className = 'x-hidden'; document.body.appendChild(frm); } Ext.Ajax.request({ //将生成的xml发送到服务器端,需特别注意这个页面的地址 url: '/CommMng/PubSys/ExportGrid', method: 'POST', form: Ext.fly('frmDummy'), callback: function (o, s, r) { //alert(r.responseText); }, isUpload: true, params: { ExportContent: Base64.encode(tmpExportContent), ExportFile: formname+'.xls' } }); } else { document.location = 'data:application/vnd.ms-excel;base64,' + Base64.encode(vExportContent); } }); tmpAllStore.load(tmpParam); //获取所有数据 } } function GridExportExcelPage(grid, filename) { if (filename == '') filename = '导出数据.xls'; var vExportContent = grid.getExcelXml(); if (Ext.isIE6 || Ext.isIE7 || Ext.isIE8 || Ext.isIE9 || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3 || Ext.isChrome) { if (!Ext.fly('frmDummy')) { var frm = document.createElement('form'); frm.id = 'frmDummy'; frm.name = ''; //id; frm.className = 'x-hidden'; document.body.appendChild(frm); } Ext.Ajax.request({ url: '/CommMng/PubSys/ExportGrid', method: 'POST', form: Ext.fly('frmDummy'), callback: function (o, s, r) { //alert(r.responseText); }, isUpload: true, params: { ExportContent: Base64.encode(vExportContent), ExportFile: filename } }); } else { document.location = 'data:application/vnd.ms-excel;base64,' + Base64.encode(vExportContent); } } function PrintComm(printType, sql1, sql2, sql3, sql4, sql5, sql6,billno,rpid,rptmode) { //Ext.Msg.wait('正在准备打印数据, 请稍侯..'); Ext.Ajax.request({ waitMsg: '正在准备打印数据...', url: '/CommMng/Print/GetPrintInfo', scope: this, params: { type: printType, sql1: sql1, sql2: sql2, sql3: sql3, sql4: sql4, sql5: sql5, sql6: sql6, billno: billno, RpID:rpid, RptMode: rptmode }, callback: function (options, success, response) { if (success) { if (Ext.MessageBox.isVisible()) { Ext.MessageBox.hide(); } var jsonresult = Ext.JSON.decode(response.responseText); if (jsonresult.Success) { var printUrl = "print://?comp=" + jsonresult.CompanyID + "&type=" + printType + "&dbid=" + jsonresult.DbSourceID + "&uid=" + jsonresult.UserId; //alert(printUrl); if (jsonresult.PrServer != NaN && jsonresult.PrServer != null && jsonresult.PrServer != "") printUrl = "print://?comp=" + jsonresult.CompanyID + "&type=" + printType + "&dbid=" + jsonresult.DbSourceID + "&uid=" + jsonresult.UserId + "&PrServer=" + jsonresult.PrServer + "&dbStr=" + jsonresult.dbStr + "&RpID=" + jsonresult.RpID + "&RptMode=" + jsonresult.RptMode; //alert(printUrl); window.location.href = window.location.href; location.href = printUrl; } else { Ext.Msg.show({ title: '错误', msg: jsonresult.Message, icon: Ext.Msg.ERROR, buttons: Ext.Msg.OK }); } } else { Ext.Msg.show({ title: '请重试', msg: '服务器响应出错', icon: Ext.Msg.ERROR, buttons: Ext.Msg.OK }); } } }); } function GridExportExcel(gridPanel, config) { if (!config) { config = { store: null, //因为后续可能需要处理分页,因此此处一般不直接传递GridPanel的数据源 title: '', //需要显示标题 limit: 4000 }; } if (gridPanel) { var tmpStore = gridPanel.getStore(); var vExportContent = ''; //以下处理分页grid数据导出的问题,从服务器中获取所有数据,需要考虑性能 var tmpParam = Ext.ux.constructor(tmpStore.lastOptions); //此处克隆了原网格数据源的参数信息 //alert(tmpParam.params[tmpStore.paramNames.limit]); //此处作者原先为Ext.ux.clone(tmpStore.lastOptions)方法,但不好使 var tmpAllStore = new Ext.data.Store({//重新定义一个数据源 proxy: tmpStore.proxy, reader: tmpStore.reader }); tmpParam.params[tmpStore.paramNames.limit] = config.limit; tmpAllStore.load(tmpParam); //获取所有数据 tmpAllStore.on('load', function (store) { config.store = store; vExportContent = gridPanel.getExcelXml(false, config); //此方法用到了一中的扩展 if (Ext.isIE6 || Ext.isIE7 || Ext.isIE8 || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3) { if (!Ext.fly('frmDummy')) { var frm = document.createElement('form'); frm.id = 'frmDummy'; frm.name = id; frm.className = 'x-hidden'; document.body.appendChild(frm); } Ext.Ajax.request({ url: '/PubSys/ExportGrid', method: 'POST', form: Ext.fly('frmDummy'), callback: function (o, s, r) { }, isUpload: true, params: { ExportContent: Base64.encode(vExportContent), ExportFile: '导出数据.xls' } }); } else { document.location = 'data:application/vnd.ms-excel;base64,' + Base64.encode(vExportContent); } }); } }; function saveQuerySetting(formname, form,isvisible,issavevalue) { var form = form.getForm(); var fieldvalue = form.getValues(); Ext.Ajax.request({ waitMsg: '正在保存数据...', url: '/MvcShipping/MsBaseInfo/SaveUserQuerySetting', scope: this, params: { formname: formname, isvisible: isvisible, issavevalue: issavevalue, querydetail: Ext.JSON.encode(fieldvalue) } }); } function LoadQueryData(formname, form,checkbox) { Ext.Ajax.request({ waitMsg: '正在查询主表数据...', url: '/MvcShipping/MsBaseInfo/GetUserQuerySetting', params: { formname: formname }, callback: function (options, success, response) { if (success) { var result = Ext.JSON.decode(response.responseText); if (!result.success) { Ext.Msg.show({ title: '提示', msg: result.Message, icon: Ext.MessageBox.ERROR, buttons: Ext.Msg.OK }); return false; } data = result.data; if (data.ISSAVEVALUE == true) { form.getForm().reset(); if (data.FIELDVALUES!=="") form.getForm().setValues(Ext.JSON.decode(data.FIELDVALUES)); if (!isNaN(checkbox)&&checkbox!=null&&checkbox!=undefined) checkbox.setValue(true); } else if (checkbox != NaN && checkbox != null) checkbox.setValue(false); return true; } else { Ext.MessageBox.alert('请求出现错误,请重试', response.responseText); return false; } }, scope: this }); return true; } function formatRMB(num) { var _F = ""; if (num < 0) { _F = "负"; num = 0 - num; } //#region 转换人民币金额大小写 var c = "零壹贰叁肆伍陆柒捌玖".split(""); // ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"] var _c = {}; // 反向对应关系 for (var i = 0; i < c.length; i++) { _c[c[i]] = i; }; var d = "元***万***亿***万"; var e = ",拾,佰,仟".split(","); function unit4(arr) { var str = "", i = 0; while (arr.length) { var t = arr.pop(); str = (c[t] + (t == 0 ? "" : e[i])) + str; i++; } str = str.replace(/[零]{2,}/g, "零"); str = str.replace(/^[零]/, ""); str = str.replace(/[零]$/, ""); if (str.indexOf("零") == 0) { str = str.substring(1); } if (str.lastIndexOf("零") == str.length - 1) { str = str.substring(0, str.length - 1); } return _F+str; } function _formatD(a) { // 转化整数部分 var arr = a.split(""), i = 0, result = ""; while (arr.length) { var arr1 = arr.splice(-4, 4); var dw = d.charAt(i), unit = unit4(arr1); if (dw == '万' && !unit) { dw = ""; } result = unit + dw + result; i += 4; } return result == "元" ? "" : result; } function _formatF(b) { // 转化小数部分 b = b || ""; switch (b.length) { case 0: return "整"; case 1: return c[b] + "角"; default: return c[b.charAt(0)] + "角" + c[b.charAt(1)] + "分"; } } function _format(n) { var a = ("" + n).split("."), a0 = a[0], a1 = a[1]; return _formatD(a0) + _formatF(a1); } function parse4(u4) { var res = 0; while (t = /([零壹贰叁肆伍陆柒捌玖])([拾佰仟]?)/g.exec(u4)) { var n = _c[t[1]], d = { "": 1, "拾": 10, "佰": 100, "仟": 1000 }[t[2]]; res += n * d; u4 = u4.replace(t[0], ""); } var result = ("0000" + res); return result.substring(result.length - 4); } function _parseD(d) { var arr = d.replace(/[零]/g, "").split(/[万亿]/), rs = ""; for (var i = 0; i < arr.length; i++) { rs += parse4(arr[i]); } ; return rs.replace(/^[0]+/, ""); }; function _parseF(f) { var res = "", t = f.replace(/[^零壹贰叁肆伍陆柒捌玖]+/g, "").split(""); // 去掉单位 if (t.length) { res = "."; } else { return ""; } ; for (var i = 0; (i < t.length && i < 2); i++) { res += _c[t[i]]; } ; return res; }; function _parse(rmb) { var a = rmb.split("元"), a1 = a[1], a0 = a[0]; if (a.length == 1) { a1 = a0; a0 = ""; } return _parseD(a0) + _parseF(a1); }; //小写转大写 function formatRMB(num) { var n = Number(num); if (!isNaN(num)) { if (num == 0) { return "零元整"; } else { return _format(n); } } else { return false; } } //大写转小写 function parseRMB(rmb) { if (/^[零壹贰叁肆伍陆柒捌玖元万亿拾佰仟角分整]{2,}$/.test(rmb)) { var result = _parse(rmb); return rmb == this.formatRMB(result) ? result : result + "(?)"; } else { return false; } }; /*小写转大写*/ var xcc = "12.22"; //document.write(xcc + "=>" + formatRMB(xcc) + "
"); /*大写转小写*/ var rrrr = "壹拾贰元贰角贰分"; //document.write(rrrr + "=>" + parseRMB(rrrr)); //#endregion return formatRMB(num); } function formatUSD(num) { var _F = ""; if (num < 0) { _F = "负"; num = 0 - num; } //#region 转换人民币金额大小写 var c = "零壹贰叁肆伍陆柒捌玖".split(""); // ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"] var _c = {}; // 反向对应关系 for (var i = 0; i < c.length; i++) { _c[c[i]] = i; }; var d = "元***万***亿***万"; var e = ",拾,佰,仟".split(","); function unit4(arr) { var str = "", i = 0; while (arr.length) { var t = arr.pop(); str = (c[t] + (t == 0 ? "" : e[i])) + str; i++; } str = str.replace(/[零]{2,}/g, "零"); str = str.replace(/^[零]/, ""); str = str.replace(/[零]$/, ""); if (str.indexOf("零") == 0) { str = str.substring(1); } if (str.lastIndexOf("零") == str.length - 1) { str = str.substring(0, str.length - 1); } return _F + str; } function _formatD(a) { // 转化整数部分 var arr = a.split(""), i = 0, result = ""; while (arr.length) { var arr1 = arr.splice(-4, 4); var dw = d.charAt(i), unit = unit4(arr1); if (dw == '万' && !unit) { dw = ""; } result = unit + dw + result; i += 4; } return result == "元" ? "" : result; } function _formatF(b) { // 转化小数部分 b = b || ""; switch (b.length) { case 0: return "整"; case 1: return c[b] + "拾美分"; default: { if (c[b.charAt(0)] !="0") { return c[b.charAt(0)] + "拾" + c[b.charAt(1)] + "美分"; } else { return c[b.charAt(1)] + "美分"; } } } } function _format(n) { var a = ("" + n).split("."), a0 = a[0], a1 = a[1]; return _formatD(a0) + _formatF(a1); } function parse4(u4) { var res = 0; while (t = /([零壹贰叁肆伍陆柒捌玖])([拾佰仟]?)/g.exec(u4)) { var n = _c[t[1]], d = { "": 1, "拾": 10, "佰": 100, "仟": 1000 }[t[2]]; res += n * d; u4 = u4.replace(t[0], ""); } var result = ("0000" + res); return result.substring(result.length - 4); } function _parseD(d) { var arr = d.replace(/[零]/g, "").split(/[万亿]/), rs = ""; for (var i = 0; i < arr.length; i++) { rs += parse4(arr[i]); } ; return rs.replace(/^[0]+/, ""); }; function _parseF(f) { var res = "", t = f.replace(/[^零壹贰叁肆伍陆柒捌玖]+/g, "").split(""); // 去掉单位 if (t.length) { res = "."; } else { return ""; } ; for (var i = 0; (i < t.length && i < 2); i++) { res += _c[t[i]]; } ; return res; }; function _parse(rmb) { var a = rmb.split("元"), a1 = a[1], a0 = a[0]; if (a.length == 1) { a1 = a0; a0 = ""; } return _parseD(a0) + _parseF(a1); }; //小写转大写 function formatRMB(num) { var n = Number(num); if (!isNaN(num)) { if (num == 0) { return "零美元整"; } else { var _r = _format(n); // _t=_r.replace('元', '美元') return _r; } } else { return false; } } //大写转小写 function parseRMB(rmb) { if (/^[零壹贰叁肆伍陆柒捌玖元万亿拾佰仟角分整]{2,}$/.test(rmb)) { var result = _parse(rmb); return rmb == this.formatRMB(result) ? result : result + "(?)"; } else { return false; } }; /*小写转大写*/ var xcc = "12.22"; //document.write(xcc + "=>" + formatRMB(xcc) + "
"); /*大写转小写*/ var rrrr = "壹拾贰元贰角贰分"; //document.write(rrrr + "=>" + parseRMB(rrrr)); //#endregion return formatRMB(num); } //在js中获取当前日期(参数0)或当前日期前后某天(参数1为后一天,-2为两天前) function GetDateStr(AddDayCount) { var dd = new Date(); dd.setDate(dd.getDate() + AddDayCount); //获取AddDayCount天后的日期 var y = dd.getFullYear(); var m = dd.getMonth() + 1; //获取当前月份的日期 var d = dd.getDate(); return y + "-" + m + "-" + d; } /** * Created with IntelliJ IDEA. * User: zhuhq * Date: 14-3-17 * Time: 下午12:26 * To change this template use File | Settings | File Templates. */ /** * * function grid2Excel(grid,filename) * @param grid Extjs grid panel * @param filename Excel 文件名称 * * **/ (function () { var format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }; var tableToExcel = function (table, fileName) { var uri = 'data:application/vnd.ms-excel;base64,' , fileName = fileName || 'excelexport' , template = '' + '' + '{table}'; var ctx = { worksheet: 'Worksheet', table: table }; var a = document.createElement('a'); document.body.appendChild(a); a.hreflang = 'zh'; a.charset = 'utf8'; a.type = "application/vnd.ms-excel"; a.href = uri + Base64.encode(format(template, ctx)); a.target = '_blank'; a.download = fileName + '.xls'; a.click(); }; window.grid2Excel = function (grid, fileName) { // var columns = grid.initialConfig.columns || [], var columns = grid.columns || [], store = grid.getStore(), headLevel1 = [], headLevel2 = [], headLevel = 1, isGroup = false, dataIndex = [], tableStr = '{thead}{tbody}
'; columns.forEach(function (column) { if ((column.columns&&column.columns.length!=0)|| (column.items&&column.items.length!=0)){ isGroup = true; return false; } }); if (isGroup) { headLevel = 2; //只支持二级表头 } columns.forEach(function (column) { if (column.hidden!=true){ if (column.columns==undefined&&column.items.length==0) { column.colspan = 1; column.rowspan = headLevel; headLevel1.push(column); dataIndex.push(column); } else { if (column.columns!=undefined){ var items = column.columns || []; } else items = column.items.items || []; column.rowspan = 1; headLevel1.push(column); var colspan=0; items.forEach(function (item) { if (item.hidden!=true){ item.colspan = 1; item.rowspan = 1; headLevel2.push(item); dataIndex.push(item); colspan=colspan+1; } }) column.colspan =colspan; } } }); var headLevel1Str = ''; headLevel1.forEach(function (head) { headLevel1Str += '' + head.text + ''; }); headLevel1Str += ''; var headLevel2Str = ''; if (headLevel2.length > 0) { headLevel2Str += ''; headLevel2.forEach(function (head) { headLevel2Str += '' + head.text + ''; }); headLevel2Str += '' } var theadStr = headLevel1Str + headLevel2Str, tbodyStr = '', defRenderer = function (value) { return value; }; store.each(function (r) { tbodyStr += ''; dataIndex.forEach(function (c) { var renderere = c.renderer || defRenderer; tbodyStr += '' + renderere.call(r, r.get(c.dataIndex)) + '' }); tbodyStr += '' }); tableStr = format(tableStr, { thead: theadStr, tbody: tbodyStr }); tableToExcel(tableStr, fileName); } })(); function SetFormReadOnly(form, readOnly) { var fields = form.getForm().getFields(); for (var i = 0, len = fields.length; i < len; i++) { fields.items[i].setReadOnly(readOnly); } } function BoxSelectgetStrValue(list) { var _list = []; for (var _i = 0; _i < list.length; _i++) { _list.push("'" + list[_i] + "'"); } return _list; } function getStoreFieldCount(store, fieldname) { var _List = []; for (var i = 0; i < store.getCount(); i += 1) { var member = store.getAt(i); var _fieldvalue = member.get(fieldname); if (_List.indexOf(_fieldvalue) >= 0) { } else { _List.push(member.get(fieldname)); } } return _List.length; } function GetDirty (store1, Delstore1) { var changelines = store1.getModifiedRecords(); var delcount = Delstore1.length; var changecount = changelines.length; if (delcount == 0 && changecount == 0) { return false; } else { return true; } } function GetDirty1 (store1) { var changelines = store1.getModifiedRecords(); if (changelines == 0) { return false; } else { return true; } } function isNullorEmpty(exp) { if (typeof (exp) == "undefined" || exp === undefined) { return true; } else if (exp == null) { return true; } else { var reg = /^\s*$/; return reg.test(exp); } } function GetDateStr(datetime) { if (!isNullorEmpty(datetime) && datetime.length >= 10) { return datetime.substring(0, 10); } else { return datetime; } } function GetDateStr_Month(datetime) { if (!isNullorEmpty(datetime) && datetime.length >= 7) { return datetime.substring(0, 7); } else { return datetime; } } function GetDateStr_Minute(datetime) { if (!isNullorEmpty(datetime) && datetime.length >= 16) { return datetime.substring(0, 16); } else { return datetime; } }