首页 > 其他分享 >就是这个样的粗爆,手搓一个计算器:排卵计算器

就是这个样的粗爆,手搓一个计算器:排卵计算器

时间:2024-10-23 12:21:03浏览次数:3  
标签:排卵 const lastPeriodDate 计算器 Date new document options 就是

       作为程序员,没有合适的工具,就得手搓一个,PC端,移动端均可适用。废话不多说,直接上代码。

HTML:

<div class="container">
<div class="calculator">
<label for="last-period">上次月经开始日期:</label> 
<input id="last-period" type="date"> 
<label for="cycle-length">月经周期(天数):</label> 
<input id="cycle-length" type="number" placeholder="输入您的月经周期天数">
<button onclick="calculateOvulation()">计算</button>
</div>
<div class="result align-left">
<p class="align-center">计算结果</p>
<p id="ovulation-period"></p>
<p id="safe-period-before"></p>
<p id="safe-period-after"></p>
<p id="menstrual-period"></p>
<p id="explanation"></p>
</div>
</div>

JS:

function calculateOvulation() {
    const lastPeriodDate = new Date(document.getElementById('last-period').value);
    const cycleLength = parseInt(document.getElementById('cycle-length').value);

    if (!lastPeriodDate || isNaN(cycleLength)) {
        document.getElementById('explanation').textContent = "请输入有效的日期和周期长度。";
        return;
    }

    // 计算排卵日(下次月经前14天)
    const ovulationDate = new Date(lastPeriodDate);
    ovulationDate.setDate(lastPeriodDate.getDate() + cycleLength - 14);

    // 计算安全期和月经期
    const safePeriodBeforeStart = new Date(lastPeriodDate);
    const safePeriodBeforeEnd = new Date(ovulationDate);
    safePeriodBeforeEnd.setDate(ovulationDate.getDate() - 19);

    const safePeriodAfterStart = new Date(ovulationDate);
    safePeriodAfterStart.setDate(ovulationDate.getDate() + 1);

    const safePeriodAfterEnd = new Date(lastPeriodDate);
    safePeriodAfterEnd.setDate(lastPeriodDate.getDate() + cycleLength - 1);

    const menstrualPeriodStart = new Date(lastPeriodDate);
    const menstrualPeriodEnd = new Date(lastPeriodDate);
    menstrualPeriodEnd.setDate(lastPeriodDate.getDate() + 4);

    const options = { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long' };

    document.getElementById('ovulation-period').textContent = `排卵期: ${ovulationDate.toLocaleDateString('zh-CN', options)}。`;
    document.getElementById('safe-period-before').textContent = `排卵前安全期: ${safePeriodBeforeStart.toLocaleDateString('zh-CN', options)} - ${safePeriodBeforeEnd.toLocaleDateString('zh-CN', options)}。`;
    document.getElementById('safe-period-after').textContent = `排卵后安全期: ${safePeriodAfterStart.toLocaleDateString('zh-CN', options)} - ${safePeriodAfterEnd.toLocaleDateString('zh-CN', options)}。`;
    document.getElementById('menstrual-period').textContent = `月经期: ${menstrualPeriodStart.toLocaleDateString('zh-CN', options)} - ${menstrualPeriodEnd.toLocaleDateString('zh-CN', options)}。`;

    document.getElementById('explanation').textContent = 
        "排卵期一般在下次月经来潮前的14天左右," +
        "排卵前安全期是从上次月经结束到排卵日前5天," +
        "排卵后安全期是从排卵日到下次月经开始。";
}

CSS:

.container {
    background-color: white;
    padding: 20px;
    border-radius: 8px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    max-width: 400px;
    width: 100%;
    text-align: center;
}

.calculator {
    margin-bottom: 20px;
}

label {
    display: block;
    margin: 10px 0 5px;
    font-weight: bold;
    color: #555;
        font-size: 18px;
}

input {
 width: 100%;
    padding: 8px;
    margin-bottom: 10px;
    border: 1px solid #ddd;
    border-radius: 4px;
}

button {
    background-color: #4CAF50;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    margin-top: 10px;
    font-size: 16px;
     width: 100%;
        display: block;
}

button:hover {
    background-color: #45a049;
}

p {
    font-size: 18px;
    color: #333;
    margin-top: 10px;
}

  线上运行,可以直接打开:排卵计算器

标签:排卵,const,lastPeriodDate,计算器,Date,new,document,options,就是
From: https://blog.csdn.net/yuchangchenTT/article/details/143148772

相关文章

  • 挑战中,Java面试题复习第4天,坚持就是胜利。
    码城|第4期一分钟吃透Java面试题【悟空非空也】 ......
  • 程序设计实践 计算器
    这段代码实现了一个综合计算器应用程序,它使用Python的Tkinter库创建了一个图形用户界面(GUI)。该计算器包含两个主要功能:普通计算器和贷款计算器。下面是对代码的详细解释:1.导入模块importtkinterastkfromtkinterimportmessageboxfrommathimportsqrttkinter:用于创......
  • 讲解LeetCode第227题:基本计算器||(完整代码)
    LeetCode第227题:基本计算器||题目介绍方法一:数组模拟栈完整代码展示核心原理演示代码片段解释片段一:片段二:片段三:片段四:片段五:......
  • 码城|挑战中,Java面试题复习第3天,坚持就是胜利【悟空非空也】
     ......
  • 【Spring】Spring实现加法计算器和用户登录
    加法计算器准备工作创建SpringBoot项目:引入SpringWeb依赖,把前端的页面放入项目中**<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,init......
  • 双亲委派机制以及类加载过程就是这样啊
    类加载过程:简洁来说就是将我们的已经完成编译的class字节码文件通过类加载器到我们JVM的内存运行时数据区成为我们可以在程序中可以使用的class对象,而类加载器就是通过双亲委派机制来实现的,这个也是反射的底层实现的原因具体流程: 加载链接 初始化加载:就是通过类加......
  • PG 的 MergeJoin 就是鸡肋
    好久没写博客,平时工作非常忙,而且现在对接的应用基本都是微服务架构。微服务这种架构平时也很难遇到复杂SQL,架构层面也限制了不允许有复杂SQL,平时处理的都是简单一批的点查SQL。基本上优化的内容就是业务,架构上改改和开发扯皮,每条SQL扣毫秒这样来搞,并发情况下程序接口的整体RT降......
  • java实现简易计算器
    写一个计算器,实现简单的加减乘除,要求有用户交互。思路:四个方法利用循环,switch输出importjava.util.Scanner;publicclassJiSuanQi{//定义加法、减法、乘法、除法方法publicstaticdoubleadd(doublea,doubleb){returna+b;}publicstaticd......
  • 表达式计算,递归的思路,表达式本身的定义就是递归
    #include<iostream>usingnamespacestd;intfactor_value();intterm_value();intexpression_value();intfactor_value()//因子{   intresult=0;   charop=cin.peek();//用op存储缓冲区第一个字符,但并不从键盘缓冲区取走   if(op=='(')//看是......
  • 长期角度来看股票市场上赚钱的人所赚的钱就是那些赔钱的人所赔的那些钱
    最近我国股票市场上的剧烈波动引起了我的一些关注,毕竟不论是出去吃饭还是理头总是会有人提到股市的,甚至有好友特意联系我来说这个股市的事情,这里我说一些我对股票的理解。我的观点:长期角度来看股票市场上赚钱的人所赚的钱就是那些赔钱的人所赔的那些钱。我的这个观点是被认为......