From 3e6729d8a4970482a2653e9ad03631339ccce773 Mon Sep 17 00:00:00 2001 From: XiaoXinPro 14 IAH5R <568170040@qq.com> Date: Thu, 8 Jun 2023 17:39:37 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=BA=A6=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/images/appointment.png | Bin 0 -> 28522 bytes config/config.js | 16 ++ package2/pages/appointment/appointment.js | 237 +++++++++++++++++++- package2/pages/appointment/appointment.json | 3 + package2/pages/appointment/appointment.ttml | 36 ++- package2/pages/appointment/appointment.ttss | 66 +++++- pages/coupon/detail/index.js | 24 +- pages/coupon/detail/index.ttml | 2 + pages/coupon/detail/index.ttss | 4 + pages/order/detail/index.js | 68 ++++-- pages/order/detail/index.ttml | 18 +- pages/order/detail/index.ttss | 11 + project.private.config.json | 12 + utils/util.js | 103 +++++++-- 14 files changed, 542 insertions(+), 58 deletions(-) create mode 100644 assets/images/appointment.png diff --git a/assets/images/appointment.png b/assets/images/appointment.png new file mode 100644 index 0000000000000000000000000000000000000000..055645667c556f2228294ff936ea6b2db3b5fcc2 GIT binary patch literal 28522 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�I~N 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 LX)2c7G7tVg==;=M literal 0 HcmV?d00001 diff --git a/config/config.js b/config/config.js index 2667193..c0c5c24 100644 --- a/config/config.js +++ b/config/config.js @@ -160,6 +160,22 @@ var config = { * 订单退款状态 */ getRefundStatus: "/order/getRefundStatus", + /** + * 查询预约状态 + */ + getUserReservation: "/wxCouponOrderReservation/getUserReservation", + /** + * 保存/更改预约信息 + */ + saveOrderReservation: "/wxCouponOrderReservation/saveOrUpdate", + /** + * 查询预约详情 + */ + getOrderReservationDetail: "/wxCouponOrderReservation/detail", + /** + * 取消预约 + */ + cancelReservation: "/wxCouponOrderReservation/cancelReservation", /** * 获取im客服id */ diff --git a/package2/pages/appointment/appointment.js b/package2/pages/appointment/appointment.js index c0895be..60f1891 100644 --- a/package2/pages/appointment/appointment.js +++ b/package2/pages/appointment/appointment.js @@ -1,9 +1,244 @@ // c:\Users\Holy-Knight-IX\Desktop\Working Space\4.TikTok-MiniPro\ttc\package2\pages\appointment\appointment.js +let config = require("../../../config/config.js"); +let util = require("../../../utils/util"); +let Http = require("../../../utils/HttpBasics"); +let app = getApp(); +const imgurl = require("../../../utils/imgurl"); Page({ data: { + appointmentText: "确认预约", + id: "", + orderId: "", + startTime: "", + endTime: "", + mallTenantId: "", + pickedAddress: "请选择地址", + pickedDate: "请选择日期", + pickedStartTime: "请选择", + pickedEndTime: "请选择", + describeStr: "", + status: "" + }, + onLoad(options) { + console.log(options, 'options'); + this.setData({ + id: options.id || '', + orderId: options.orderId || '', + startTime: options.startTime || '', + endTime: options.endTime || '' + }) + + const mallTenantId = tt.getStorageSync('mallTenantId'); + if (mallTenantId) { + this.setData({ + mallTenantId + }) + } + + if (this.data.id) { + this.getDetail(this.data.id) + } + }, + + chooseAddress() { + let that = this; + tt.chooseLocation({ + success: function (res) { + that.setData({ + pickedAddress: res.address, + }) + }, + fail: function (error) { + console.log(error) + }, + complete: function (data) {} + }) + }, + + chooseDate(e) { + console.log(e.detail.value, 'e'); + this.setData({ + pickedDate: e.detail.value + }) + }, + + chooseStartTime(e) { + console.log(e.detail.value, 'e'); + this.setData({ + pickedStartTime: e.detail.value + }) + }, + + chooseEndTime(e) { + console.log(e.detail.value, 'e'); + this.setData({ + pickedEndTime: e.detail.value + }) + }, + + describing(e) { + this.setData({ + describeStr: e.detail.value + }) + }, + + confirm() { + const tempData = this.data + + if (tempData.pickedAddress == '请选择地址') { + tt.showToast({ + title: '请选择地址!', + icon: 'fail' + }); + return + } + + if (tempData.pickedDate == '请选择日期') { + tt.showToast({ + title: '请请选择日期!', + icon: 'fail' + }); + return + } + + if (tempData.pickedStartTime == '请选择') { + tt.showToast({ + title: '请起始时间!', + icon: 'fail' + }); + return + } + + if (tempData.pickedEndTime == '请选择') { + tt.showToast({ + title: '请结束时间!', + icon: 'fail' + }); + return + } + + const data = { + couponOrderId: tempData.orderId, + userAddress: tempData.pickedAddress, + startDate: tempData.pickedDate + " " + tempData.pickedStartTime + ":00", + endDate: tempData.pickedDate + " " + tempData.pickedEndTime + ":00", + describeStr: tempData.describeStr, + mallTenantId: tempData.mallTenantId || '' + } + + if (this.data.id) { + data.id = this.data.id + } + + if (this.data.status == 1) { + data.status = 0 + } + + console.log(data, 'data'); + this.saveOrderReservation(data) + }, + + cancel() { + tt.showModal({ + title: "取消预约", + content: "确定要取消预约吗?", + showCancel: true, + success: (res) => { + if (res.confirm) { + this.cancelReservation(this.data.id) + } + if (res.cancel) { + return + } + }, + fail: (res) => { + + }, + }); + + }, + + cancelReservation(id) { + const that = this + Http.post({ + url: config.api.cancelReservation, + data: { + id, + mallTenantId: this.data.mallTenantId || '' + } + }).then(res => { + console.log(res, 'cancelReservation'); + tt.showToast({ + title: '取消成功!', + icon: 'success', + duration: 2000, + success: (res) => { + setTimeout(() => { + tt.navigateBack(); + }, 1500); + }, + fail: (res) => { + + }, + }); + }).catch(err => { + console.log(err, 'cancelReservation'); + tt.showToast({ + title: err.message, + icon: 'none' + }); + }) + }, + + saveOrderReservation(data) { + Http.post({ + url: config.api.saveOrderReservation, + data + }).then(res => { + console.log(res, 'saveOrderReservation'); + tt.showToast({ + title: '预约成功!', + icon: 'success', + duration: 2000, + success: (res) => { + setTimeout(() => { + tt.navigateBack(); + }, 1500); + }, + fail: (res) => { + }, + }); + }).catch(err => { + console.log(err, 'saveOrderReservation'); + tt.showToast({ + title: err.message, + icon: 'none' + }); + }) }, - onLoad: function (options) { + getDetail(id) { + const that = this + Http.get({ + url: config.api.getOrderReservationDetail, + data: { + id, + mallTenantId: this.data.mallTenantId || '' + } + }).then(res => { + console.log(res, 'getOrderReservationDetail'); + that.setData({ + pickedAddress: res.data.userAddress || '请选择地址', + pickedDate: util.timestampToTime(res.data.startDate, 'YYYY-MM-DD'), + pickedStartTime: util.timestampToTime(res.data.startDate, 'hh:mm'), + pickedEndTime: util.timestampToTime(res.data.endDate, 'hh:mm'), + describeStr: res.data.describeStr, + status: res.data.status, + appointmentText: res.data.status == 1 ? "重新预约" : "修改预约" + }) + }).catch(err => { + console.log(err, 'getOrderReservationDetail'); + }) } }) \ No newline at end of file diff --git a/package2/pages/appointment/appointment.json b/package2/pages/appointment/appointment.json index 3928faa..e608899 100644 --- a/package2/pages/appointment/appointment.json +++ b/package2/pages/appointment/appointment.json @@ -1,3 +1,6 @@ { + "navigationBarTitleText": "订单预约", + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", "usingComponents": {} } \ No newline at end of file diff --git a/package2/pages/appointment/appointment.ttml b/package2/pages/appointment/appointment.ttml index f14869b..678a22a 100644 --- a/package2/pages/appointment/appointment.ttml +++ b/package2/pages/appointment/appointment.ttml @@ -1,2 +1,36 @@ -c:\Users\Holy-Knight-IX\Desktop\Working Space\4.TikTok-MiniPro\ttc\package2\pages\appointment\appointment.ttml \ No newline at end of file + + + 选择服务地点: + + {{ pickedAddress }} + + + + + 选择服务地点: + + {{ pickedAddress }} + + + + + 选择服务日期: + + {{ pickedDate }} + + + + 预计上门时间: + {{ pickedStartTime }} + - + {{ pickedEndTime }} + + + + + + + + + \ No newline at end of file diff --git a/package2/pages/appointment/appointment.ttss b/package2/pages/appointment/appointment.ttss index bf74286..57f4f57 100644 --- a/package2/pages/appointment/appointment.ttss +++ b/package2/pages/appointment/appointment.ttss @@ -1 +1,65 @@ -/* c:\Users\Holy-Knight-IX\Desktop\Working Space\4.TikTok-MiniPro\ttc\package2\pages\appointment\appointment.ttss */ \ No newline at end of file +/* c:\Users\Holy-Knight-IX\Desktop\Working Space\4.TikTok-MiniPro\ttc\package2\pages\appointment\appointment.ttss */ +page { + font-size: 30rpx; + box-sizing: border-box !important; +} + +.continer { + width: 90%; + height: 100%; + margin: auto; +} + +.addressPicker { + background-color: #fff; + border-radius: 20rpx; + padding: 30rpx; + margin: 35rpx auto; +} + +.address { + color: #8a8a8a; +} + +.addressPickerFlex { + display: flex; + justify-content: space-between; + background-color: #fff; + border-radius: 20rpx; + padding: 30rpx; + margin: 35rpx auto; +} + + +.datePicker { + background-color: #fff; + border-radius: 20rpx; + padding: 30rpx; + margin: 35rpx auto; +} + +.datePickerFlex { + display: flex; + justify-content: space-between; + background-color: #fff; + border-radius: 20rpx; + padding: 30rpx; + margin: 35rpx auto; +} + +.textarea { + margin: 35rpx auto; + overflow: hidden; + border-radius: 20rpx; +} + +.describe { + width: 100%; + background-color: #fff; + padding: 25rpx; +} + +.confirm { + background-color: #3c89ff; + margin-bottom: 20rpx; +} \ No newline at end of file diff --git a/pages/coupon/detail/index.js b/pages/coupon/detail/index.js index 287393f..e62a7c6 100644 --- a/pages/coupon/detail/index.js +++ b/pages/coupon/detail/index.js @@ -306,7 +306,7 @@ Page({ let param = { id: this.data.cardData.couponOrderId, cUserId: this.data.cardData.cuserId, - updateDate: util.formatTime(Number(that.data.cardData.updateDate), "yyyy-MM-dd hh:mm:ss") + updateDate: util.timestampToTime(Number(that.data.cardData.updateDate), "YYYY-MM-DD hh:mm:ss") } Http.get({ url: config.api.queryCardStatus, @@ -327,7 +327,7 @@ Page({ let param = { id: this.data.cardData.couponOrderId, cUserId: this.data.cardData.cuserId, - updateDate: util.formatTime(Number(this.data.cardData.updateDate), "yyyy-MM-dd hh:mm:ss") + updateDate: util.timestampToTime(Number(this.data.cardData.updateDate), "YYYY-MM-DD hh:mm:ss") } this.setData({ @@ -788,7 +788,7 @@ Page({ clearInterval(that.data.setInterval) } if (res.data.actStatus == 0) { - var beginTime = util.formatTime(res.data.beginTime, "yyyy-MM-dd hh:mm:ss"); + var beginTime = util.timestampToTime(res.data.beginTime, "YYYY-MM-DD hh:mm:ss"); if (util.timechuo(beginTime).indexOf('-') == 0) { that.setData({ beginTime: "活动已结束", @@ -799,7 +799,7 @@ Page({ }); } } else { - var endTime = util.formatTime(res.data.endTime, "yyyy-MM-dd hh:mm:ss"); + var endTime = util.timestampToTime(res.data.endTime, "YYYY-MM-DD hh:mm:ss"); if (util.timechuo(endTime).indexOf('-') == 0) { that.setData({ endtime: "活动已结束", @@ -818,8 +818,8 @@ Page({ if (res.data.type == 10) { that.setData({ salePriceStr: res.data.salePriceStr, - pickEndDate: util.formatTime(res.data.pickEndDate, "yyyy-MM-dd"), - pickStartDate: util.formatTime(res.data.pickStartDate, "yyyy-MM-dd"), + pickEndDate: util.timestampToTime(res.data.pickEndDate, "YYYY-MM-DD"), + pickStartDate: util.timestampToTime(res.data.pickStartDate, "YYYY-MM-DD"), priceStr: res.data.priceStr, tailPriceStr: res.data.tailPriceStr, origPriceStr: res.data.origPriceStr @@ -827,12 +827,12 @@ Page({ } if (res.data.validType == 1) { that.setData({ - soldStartTime: util.formatTime(res.data.soldStartTime, "yyyy-MM-dd") || null, - soldEndTime: util.formatTime(res.data.soldEndTime, "yyyy-MM-dd") || null, - validStartDate: util.formatTime(res.data.validStartDate, "yyyy-MM-dd"), - validEndDate: util.formatTime(res.data.validEndDate, "yyyy-MM-dd"), - pickStartDate: util.formatTime(res.data.pickStartDate, "yyyy-MM-dd"), - pickEndDate: util.formatTime(res.data.pickEndDate, "yyyy-MM-dd"), + soldStartTime: util.timestampToTime(res.data.soldStartTime, "YYYY-MM-DD") || null, + soldEndTime: util.timestampToTime(res.data.soldEndTime, "YYYY-MM-DD") || null, + validStartDate: util.timestampToTime(res.data.validStartDate, "YYYY-MM-DD"), + validEndDate: util.timestampToTime(res.data.validEndDate, "YYYY-MM-DD"), + pickStartDate: util.timestampToTime(res.data.pickStartDate, "YYYY-MM-DD"), + pickEndDate: util.timestampToTime(res.data.pickEndDate, "YYYY-MM-DD"), }); } else { if (res.data.validDays) { diff --git a/pages/coupon/detail/index.ttml b/pages/coupon/detail/index.ttml index c69efbe..4a33e9d 100644 --- a/pages/coupon/detail/index.ttml +++ b/pages/coupon/detail/index.ttml @@ -138,6 +138,8 @@ + + 购买须知 使用期 diff --git a/pages/coupon/detail/index.ttss b/pages/coupon/detail/index.ttss index 74db8ad..0ba3111 100644 --- a/pages/coupon/detail/index.ttss +++ b/pages/coupon/detail/index.ttss @@ -377,6 +377,10 @@ button::after { padding-bottom: 30rpx; } +.alerting { + width: 100%; +} + .nodesD { height: 87rpx; line-height: 87rpx; diff --git a/pages/order/detail/index.js b/pages/order/detail/index.js index b35be1c..9cd8fda 100644 --- a/pages/order/detail/index.js +++ b/pages/order/detail/index.js @@ -60,7 +60,12 @@ Page({ IMorderId: "", outOrderId: "", outRefundOrderId: "", - canIUseRefund: false + canIUseRefund: false, + isAppointment: false, + appointStart: "", + appointEnd: "", + appointmentId: "", + appointmentStatus: "" }, imCallback(e) { @@ -175,6 +180,48 @@ Page({ }) }, + goAppointment(e) { + const that = this + const orderId = e.currentTarget.dataset.id + const id = this.data.appointmentId + const startTime = that.data.order.validStartDate + const endTime = that.data.order.validEndDate + + console.log(startTime, endTime); + + tt.navigateTo({ + url: `/package2/pages/appointment/appointment?id=${id}&orderId=${orderId}&startTime=${startTime}&endTime=${endTime}`, + }); + }, + + getUserReservation(couponOrderId) { + const that = this + Http.get({ + url: config.api.getUserReservation, + data: { + couponOrderId, + mallTenantId: this.data.mallTenantId || '' + } + }).then(res => { + console.log(res, 'getUserReservation'); + if (res.data) { + const appointStart = util.timestampToTime(res.data.startDate, 'YYYY-MM-DD hh:mm:ss') + const appointEnd = util.timestampToTime(res.data.endDate, 'hh:mm:ss') + const appointmentId = res.data.id + const appointmentStatus = res.data.status + that.setData({ + appointStart, + appointEnd, + appointmentId, + appointmentStatus, + isAppointment: true + }) + } + }).catch(err => { + console.log(err, 'getUserReservation'); + }) + }, + getOrderStatus(orderId) { const that = this Http.get({ @@ -222,13 +269,6 @@ Page({ }) }, - goAppointment(e) { - const id = e.currentTarget.dataset.id - tt.navigateTo({ - url: `/package2/pages/appointment/appointment?id=${id}`, - }); - }, - getIm() { //获取im客服id const that = this Http.get({ @@ -259,8 +299,10 @@ Page({ const couponChannelId = res.data.orders[0].couponChannelId const orderID = res.data.orders[0].id + const cOrderID = res.data.orders[0].couponOrderId that.getOrderStatus(orderID) + that.getUserReservation(cOrderID) that.getIm() const extParam = res.data.extParam || null if (extParam) { @@ -394,16 +436,16 @@ Page({ tenantId: res.data.tenantId }) } - var createDate = util.formatTime(res.data.orders[0].createDate, "yyyy-MM-dd"); + var createDate = util.timestampToTime(res.data.orders[0].createDate, "YYYY-MM-DD"); let tempData = res.data.orders[0] tempData.deliveryInfo = tempData.deliveryInfo ? JSON.parse(tempData.deliveryInfo) : "" tempData.itemGroup = tempData.itemGroup ? JSON.parse(tempData.itemGroup) : "" - tempData.soldStartTime = util.formatTime(tempData.soldStartTime, "yyyy-MM-dd") || null, - tempData.soldEndTime = util.formatTime(tempData.soldEndTime, "yyyy-MM-dd") || null, + tempData.soldStartTime = util.timestampToTime(tempData.soldStartTime, "YYYY-MM-DD") || null, + tempData.soldEndTime = util.timestampToTime(tempData.soldEndTime, "YYYY-MM-DD") || null, - tempData.validStartDate = util.formatTime(tempData.validStartDate, "yyyy-MM-dd") - tempData.validEndDate = util.formatTime(tempData.validEndDate, "yyyy-MM-dd") + tempData.validStartDate = util.timestampToTime(tempData.validStartDate, "YYYY-MM-DD") + tempData.validEndDate = util.timestampToTime(tempData.validEndDate, "YYYY-MM-DD") tempData.couponOrderIdS = tempData.couponOrderId ? tempData.couponOrderId.slice(0, 4) + `******` + tempData.couponOrderId.slice(14) : '' diff --git a/pages/order/detail/index.ttml b/pages/order/detail/index.ttml index 0b85cca..a1272ee 100644 --- a/pages/order/detail/index.ttml +++ b/pages/order/detail/index.ttml @@ -116,14 +116,18 @@ --> - + 预约时间: - 点击预约 - - - + + 点击预约 + {{appointStart}}-{{appointEnd}} + 预约已取消 + @@ -210,6 +214,8 @@ + + diff --git a/pages/order/detail/index.ttss b/pages/order/detail/index.ttss index 61e8d61..8a597b5 100644 --- a/pages/order/detail/index.ttss +++ b/pages/order/detail/index.ttss @@ -19,6 +19,17 @@ page { z-index: 99999; } +.alerting { + width: 100%; +} + +.cancelAppoint { + color: #ffffff; + background-color: #ff0000; + border-radius: 5rpx; + padding: 5rpx 3rpx; +} + .serviceBox2 { width: 50rpx; height: 50rpx; diff --git a/project.private.config.json b/project.private.config.json index 0ead833..4a6bb79 100644 --- a/project.private.config.json +++ b/project.private.config.json @@ -56,8 +56,20 @@ "scene": "011007", "launchFrom": "scan", "location": "audit" + }, + { + "id": 1686207127735, + "name": "预约功能调试", + "pathName": "package2/pages/appointment/appointment", + "query": "id=826355515227168768&startTime=2023-05-29&endTime=2023-06-28", + "scene": "990001", + "launchFrom": "scan", + "location": "qr_code" } ] } + }, + "setting": { + "mockLogin": false } } diff --git a/utils/util.js b/utils/util.js index c1c0049..596e6a0 100644 --- a/utils/util.js +++ b/utils/util.js @@ -8,10 +8,11 @@ function convertUTCTimeToLocalTime(UTCDateString) { if (!UTCDateString) { return '-'; } - function formatFunc(str) { //格式化显示 + + function formatFunc(str) { //格式化显示 return str > 9 ? str : '0' + str } - var date2 = new Date(UTCDateString); //这步是关键 + var date2 = new Date(UTCDateString); //这步是关键 var year = date2.getFullYear(); var mon = formatFunc(date2.getMonth() + 1); var day = formatFunc(date2.getDate()); @@ -20,7 +21,7 @@ function convertUTCTimeToLocalTime(UTCDateString) { hour = hour >= 24 ? hour - 24 : hour; hour = formatFunc(hour); var min = formatFunc(date2.getMinutes()); - var dateStr = ' ' + hour + ':' + min ; + var dateStr = ' ' + hour + ':' + min; return dateStr; } @@ -29,15 +30,15 @@ function convertUTCTimeToLocalTime(UTCDateString) { // return new Date(+new Date(dateee) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, ''); // } -function moodsText(Num){//人气值处理 Num人气值 返回字符串 处理到万位 +function moodsText(Num) { //人气值处理 Num人气值 返回字符串 处理到万位 let sing = "" - if(Num>10000){ - sing = (Num/10000).toFixed(2)+"w" - - }else{ - sing =Num - } - return sing + if (Num > 10000) { + sing = (Num / 10000).toFixed(2) + "w" + + } else { + sing = Num + } + return sing } const formatTime = (date, fmt) => { @@ -69,9 +70,9 @@ const formatTime = (date, fmt) => { if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace( RegExp.$1, - RegExp.$1.length == 1 - ? o[k] - : ("00" + o[k]).substr(("" + o[k]).length) + RegExp.$1.length == 1 ? + o[k] : + ("00" + o[k]).substr(("" + o[k]).length) ); return fmt; } catch (error) { @@ -104,6 +105,7 @@ function qrc(id, code, width, height) { height: convert_length(height) }); } + function fmtDate(obj) { if (typeof obj === 'string' && obj.length === 13) { obj = Number(obj); @@ -121,6 +123,57 @@ function fmtDate(obj) { ); } +/** + * @description 根据时间戳获取时间 + * @param {*} timestamp 必传,number类型,时间戳数据(10位及以下,10位至13位);若不传,则返回:“无时间戳” + * @param {*} format 选传,string类型,提供以下时间格式:YYYY-MM-DD hh:mm:ss、YYYY/MM/DD hh:mm:ss、YYYY.MM.DD hh:mm:ss、YYYY MM DD hh:mm:ss、YYYY年MM月DD日 hh:mm:ss、YYYY-MM-DD、YYYY/MM/DD、YYYY.MM.DD、YYYY MM DD、YYYY年MM月DD日、hh:mm:ss、hh:mm;若不传,则默认为:YYYY-MM-DD + * @returns 根据要求的时间格式 + * @version V 1.0, Created by YWQ, 2022.10.20 + */ +function timestampToTime(timestamp, format) { + //时间戳为10位需*1000,时间戳为13位不需乘1000 + const length = timestamp ? timestamp.length : '' + if (length <= 10) { + var date = new Date(timestamp * 1000) + } else { + var date = new Date(timestamp) + } + let Y = String(date.getFullYear()) + let M = String(date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + let D = String(date.getDate() + 1 < 10 ? '0' + (date.getDate()) : date.getDate()) + let h = String(date.getHours() + 1 < 10 ? '0' + (date.getHours()) : date.getHours()) + let m = String(date.getMinutes() + 1 < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + let s = String(date.getSeconds() + 1 < 10 ? '0' + (date.getSeconds()) : date.getSeconds()) + // return Y + M + D + h + m + s + if (format == "YYYY-MM-DD hh:mm:ss") { + return Y + "-" + M + "-" + D + " " + h + ":" + m + ":" + s + } else if (format == "YYYY/MM/DD hh:mm:ss") { + return Y + "/" + M + "/" + D + " " + h + ":" + m + ":" + s + } else if (format == "YYYY.MM.DD hh:mm:ss") { + return Y + "." + M + "." + D + " " + h + ":" + m + ":" + s + } else if (format == "YYYY MM DD hh:mm:ss") { + return Y + " " + M + " " + D + " " + h + ":" + m + ":" + s + } else if (format == "YYYY年MM月DD日 hh:mm:ss") { + return Y + "年" + M + "月" + D + "日" + " " + h + ":" + m + ":" + s + } else if (format == "YYYY-MM-DD") { + return Y + "-" + M + "-" + D + } else if (format == "YYYY/MM/DD") { + return Y + "/" + M + "/" + D + } else if (format == "YYYY.MM.DD") { + return Y + "." + M + "." + D + } else if (format == "YYYY MM DD") { + return Y + " " + M + " " + D + } else if (format == "YYYY年MM月DD日") { + return Y + "年" + M + "月" + D + "日" + } else if (format == "hh:mm:ss") { + return h + ":" + m + ":" + s + } else if (format == "hh:mm") { + return h + ":" + m + } else { + return Y + "-" + M + "-" + D + } +} + //计算下单的时间与现在的时间的 function timechuo(startTime) { var s1 = new Date(startTime.replace(/-/g, "/")); @@ -137,20 +190,20 @@ function timechuo(startTime) { var minute = Math.floor(runTime / 60); var runTime = runTime % 60; var second = runTime; - if (day && !year && !month){ + if (day && !year && !month) { return (day + '天' + hour + "小时" + minute + "分钟") - } else if (month && !year){ - return ((month*30+day) +'天' + hour + "小时" + minute + "分钟") + } else if (month && !year) { + return ((month * 30 + day) + '天' + hour + "小时" + minute + "分钟") } else if (year) { - return ((year*365 + month*30+ day) + '天' + hour + "小时" + minute + "分钟") - }else{ + return ((year * 365 + month * 30 + day) + '天' + hour + "小时" + minute + "分钟") + } else { return (hour + "小时" + minute + "分钟") } } //计算时间差 -function timecha(endTime,startTime) { +function timecha(endTime, startTime) { var s1 = new Date(endTime.replace(/-/g, "/")); var s2 = new Date(startTime.replace(/-/g, "/")); var runTime = parseInt((s1.getTime() - s2.getTime()) / 1000); @@ -165,8 +218,9 @@ function timecha(endTime,startTime) { var minute = Math.floor(runTime / 60); var runTime = runTime % 60; var second = runTime; - return (month+"月"+day+"天"+hour+"小时"+minute+"分钟") + return (month + "月" + day + "天" + hour + "小时" + minute + "分钟") } + function isJSON(str) { if (typeof str == 'string') { console.log("string") @@ -202,6 +256,7 @@ module.exports = { fmtDate: fmtDate, timechuo: timechuo, timecha: timecha, - moodsText:moodsText, - convertUTCTimeToLocalTime: convertUTCTimeToLocalTime -}; + moodsText: moodsText, + convertUTCTimeToLocalTime: convertUTCTimeToLocalTime, + timestampToTime: timestampToTime +}; \ No newline at end of file