微信小程序实现:月经记录与预测显示

要在微信小程序中实现对女性月经的记录和预测,可以按照以下步骤进行:

  • 设计界面:设计一个简洁易用的界面,包含记录周期开始日期、结束日期等必要信息,并提供可视化数据分析功能。
  • 数据存储:建立数据库来存储用户输入的月经周期信息。可以使用微信小程序自带云开发能力或者第三方平台如LeanCloud等。
  • 预测算法:根据用户过去几个月的周期长度和时间跨度,利用数学模型来预测下一次月经开始日期。常见的预测算法有移动平均值、线性回归等。
  • 提醒 :将处理好的数据显示或者发送到签前台
    废话不多说,我们介绍详细步骤
  1. 设计界面
    在 WXML 文件中创建表单,包含开始日期、结束日期等输入框和提交按钮。使用 WXSS 设置样式并添加图标以提高用户体验。
  2. 数据存储
    首先需要在微信小程序云开发控制台中创建一个数据库,并设置相应的集合和字段。例如,可以创建一个名为“periods”的集合,并设置“start_date”、“end_date”等字段来保存用户输入的周期信息。
    然后,在代码中调用 wx.cloud.database() 获取数据库实例,并使用该实例将用户输入的周期信息保存到数据库中。
  3. 预测算法 以移动平均值为例:
  • 在获取到过去几个月(如三个月)的周期数据后,计算这些周期长度的平均值。
  • 然后,将该平均值作为下一个预测周期长度,并根据用户输入的最近一次开始日期来计算下一个预测开始日期。例如,如果上一个周期是从 2022 年 5 月 1 日到 5 月 28 日,则可以使用以下代码来计算下一个预测开始日期:
let lastStartDate = new Date('2022/05/01');
let predictedCycleLength = averageCycleLength; // 假设已经计算出了平均长度
let predictedStartDate = new Date(lastStartDate.getTime() + (predictedCycleLength * oneDay));

其中 oneDay 是一天的毫秒数。
4. 提醒
为了提醒用户下一个月经周期的开始日期,可以在代码中使用 wx.showToast() 函数来弹出提示框。例如,在记录完本次周期信息并计算出下一个预测开始日期后,可以添加以下代码:

let nextStartDate = predictedStartDate;
let today = new Date();
if (nextStartDate.getTime() > today.getTime()) {
  let daysUntilNextPeriod = Math.floor((nextStartDate.getTime() - today.getTime()) / oneDay);
  wx.showToast({
    title: '距离下一次月经还有' + daysUntilNextPeriod + '天',
    icon: 'none'
  });
}

该代码会判断下一个预测开始日期是否晚于当前时间,并计算两者之间的天数差。如果差值大于零,则弹出提示框,显示距离下一次月经开始还有多少天。如果差值小于等于零,则不做任何操作。
完整代码示例:仅供参考 实际需要再做修改 方法没有封装,自己可以再做修改

const db = wx.cloud.database();
const periodsCollection = db.collection('periods');
const oneDay = 24 * 60 * 60 * 1000;
Page({
  data: {
    startDate: '',
    endDate: ''
  },
  onStartDateChange(event) {
    this.setData({startDate: event.detail.value});
  },
  onEndDateChange(event) {
    this.setData({endDate: event.detail.value});
  },
async onSubmit() {
    let startDate = new Date(this.data.startDate);
    let endDate = new Date(this.data.endDate);
    if (startDate && endDate && endDate > startDate) {
    // 计算周期长度并保存到数据库中
	if (startDate&&endDate&&endDate>startDate) {
	  let cycleLengthInDays=Math.floor((endDate.getTime()-startDate.getTime())/oneDay);
	  await periodsCollection.add({
	    data:{
	      start_date: startDate.toLocaleDateString(),
	      end_date: endDate.toLocaleDateString()
	    }
	  });
	   // 获取过去三个月的周期数据,并计算平均周期长度和下一个预测开始日期
	let today = new Date();
	let threeMonthsAgo = new Date(today.getFullYear(), today.getMonth() - 3, 1);
	const periodsQueryResult = await periodsCollection.where({
	  start_date: db.command.gte(threeMonthsAgo)
	}).get();
	if (periodsQueryResult.data.length > 0) {
	   // 计算平均周期长度,并保存到本地存储中
	   let totalCycleLengthInDays=periodsQueryResult.data.reduce((sum, period) => {
    return sum + Math.floor((new Date(period.end_date).getTime() - new Date(period.start_date).getTime()) / oneDay);
  }, 0);
   let averageCycleLengthInDays= Math.round(totalCycleLengthInDays/periodsQueryResult.data.length); 
   // 计算下一个周期的开始日期,并保存到数据库中
   let lastStartDate = new Date(periodsQueryResult.data[0].start_date);
   let predictedCycleLengthInDays = averageCycleLengthInDays;
   let predictedStartDate = new Date(lastStartDate.getTime() + (predictedCycleLengthInDays * oneDay));
   
    await periodsCollection.add({
     data: {
       start_date: predictedStartDate.toLocaleDateString(),
       end_date: ''
     }
    });
      // 弹出提示框提醒用户下一次月经开始时间(如果有)
	if (predictedStartDate) {
	  let daysUntilNextPeriod = Math.floor((predictedStartDate.getTime() - today.getTime()) / oneDay);
	  if (daysUntilNextPeriod > 0) {
	    wx.showToast({
	      title: '距离下一次月经还有' + daysUntilNextPeriod + '天',
	      icon: 'none'
	    });
	  }
	}
	// 清空输入框
	this.setData({startDate:'',endDate:''});
 }
},
})

仅供参考 实际需要再做修改 方法没有封装,自己可以再做修改

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 这个微信小程序demo是一个专门为花店设计的应用程序。该程序可以被花店使用来展示其花卉产品、促销活动、营业时间和位置等信息。其主要目的是为了让花店更好的服务顾客,提高其销售业绩。 该微信小程序的主界面非常简单,用户可以在其中浏览花店的花卉产品以及相关信息。该程序还提供了搜索功能,用户可以根据花卉种类、价格、颜色等条件来查找需要的花卉产品。用户可以在商品详情中查看花束的详细信息,包括产品描述、价格和库存等。顾客还可以在该微信小程序上提交订单,并在线支付。 此外,花店还可以利用该微信小程序来管理其业务。该程序提供了一个后台管理界面,让花店管理者可以管理订单、添加、删除和编辑产品、管理花店的营业时间和位置等。 总之,该微信小程序是为花店设计的一个充满活力和功能性的解决方案,可以帮助花店实现管理效率的提升,提供更好的用户体验,进而增加销售业绩。 ### 回答2: 微信小程序demo:花店,是一个用于展示花店销售产品、实现购买的小程序示例。该小程序主要功能包括商品浏览、商品搜索、商品分类、购物车、订单支付等。 首先,用户可以在花店小程序中浏览各种精美的鲜花和绿植,通过点击商品图片或是商品信息,打开商品详细页面,了解每个商品的详细信息和售价。 其次,小程序设计了分类功能,可根据花草种类、价格等分各种商品进行分类,方便用户查找和筛选适合自己的产品。 在小程序售卖的商品中,用户将自己喜欢的商品加入购物车,或者选择直接下单,再通过线上支付等方式进行结算。 最后,小程序还提供了订单查询功能和订单详情功能,方便用户随时查询和了解订单状态和物流信息。 在小程序的开发过程中,考虑到用户体验,花店小程序设计简洁明了、色彩和谐、交互简洁、界面美观,体现了微信小程序的优势和特点,让用户能够更轻松愉快地进行购物。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨不爱写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值