比较Date范围和moment.js

时间:2018-12-07 20:39:21

标签: javascript datetime momentjs angular-moment

我正在尝试获得以下输出:

enter image description here

这是我的代码:

const start = "12/7/2018";
const end = "10/6/2019";

var startLease = moment(start, "MM/DD/YYYY");
var endLease = moment(end, "MM/DD/YYYY");

var array = [];
var i = 0;
var nextEnd;

while (1 == 1) {
  var nextStart = nextEnd ? (nextEnd.date() > 28 ? nextEnd : nextEnd) : nextEnd || startLease.clone().add(i, 'M');
  nextEnd = startLease.clone().add(i + 1, 'M') > endLease ? endLease : startLease.clone().add(i + 1, 'M');
  if (nextEnd.date() > 28) {
    nextEnd.subtract(1, 'days')
  } else {}

  array.push(nextEnd.diff(nextStart, 'days'));

  if (nextEnd >= endLease) {
    break;
  } else {}
  i += 1
}

console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

问题: 它不是从每月的7th-6th开始,而是从每月的7th-7th开始。我尝试了.subtract(1,'days'),但是没有输出正确的值。但是,这在本月末有效。

感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

我在循环中添加了一些日志记录,并在一次迭代后将其切断。

对于您的示例,只有第一个月是错误的,因此,您的期望是,如果在2018年12月7日之前增加1个月,您将获得2019年1月6日的收入(实际上您将获得2019年1月7日的收入)

我不确定导致减去一天的情况应该做什么。 nextEnd.date()将解析为该月的一天,对于您的示例,该日期始终小于28。

const start = "12/7/2018";
const end = "10/6/2019";

var startLease = moment(start, "MM/DD/YYYY");
var endLease = moment(end, "MM/DD/YYYY");

var array = [];
var i = 0;
var nextEnd;

while (1 == 1) {
  var nextStart = nextEnd ? (nextEnd.date() > 28 ? nextEnd : nextEnd) : nextEnd || startLease.clone().add(i, 'M');
  console.log(nextStart);
  nextEnd = startLease.clone().add(i + 1, 'M') > endLease ? endLease : startLease.clone().add(i + 1, 'M');
  console.log(nextEnd);
  if (nextEnd.date() > 28) {
    nextEnd.subtract(1, 'days')
  } else {}

  array.push(nextEnd.diff(nextStart, 'days'));

  if (nextEnd >= endLease) {
    break;
  } else {}
  i += 1;
  break;
}

console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

答案 1 :(得分:0)

这对我有用:

import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class page339_4 extends JFrame {

int randomNumber = new Random().nextInt(100) + 1; // New game initiator

public page339_4(){
    setTitle("Number Guesser");
    setSize(400, 200);
    setLayout(new BorderLayout(1,0));


    JPanel panel1 = new JPanel();
    JLabel label = new JLabel("Guess a number here :");
    JTextField field1 = new JTextField(10);
    panel1.add(label);
    panel1.add(field1);

    JPanel panel2 = new JPanel();
    JTextField field2 = new JTextField();
    field2.addActionListener(f2->{
        String playerGuess = field1.getText();
        int guess = Integer.parseInt(playerGuess);
        if (guess > randomNumber) {field2.setText("Too big!"); field2.setBackground(Color.CYAN);}
        else if (guess < randomNumber) {field2.setText("Too low!"); field2.setBackground(Color.RED);}
        else {field2.setText("Congratulations! Right Number!"); field2.setBackground(Color.GREEN);}
    });
    panel2.add(field2);

    JPanel panel3 = new JPanel();
    JButton btnNewGame = new JButton("New Game");
    btnNewGame.addActionListener(e->{
        int randomNumber = new Random().nextInt(100) + 1;
        field2.setText("");
    });
    panel3.add(btnNewGame);
    JButton btnExit = new JButton("Close");
    btnExit.addActionListener(e->{
        System.exit(0);
    });
    panel3.add(btnExit);

    add(panel1, BorderLayout.NORTH);
    add(panel2, BorderLayout.CENTER);
    add(panel3, BorderLayout.SOUTH);
    pack();
    setLocationRelativeTo(null);
    setVisible(true);
}