如果在javascript中是冬季,则更改粒子

如果在javascript中是冬季,则更改粒子,javascript,date,compare,Javascript,Date,Compare,对于粒子js,我有两种配置(json)。其中一个是冬天,所以从21岁开始应该是活跃的。十二月至二十一日。前进我尝试了很多事情,但仍然没有成功(不是因为现在仍然是11月:) 我最后试过的就是这个 var today = new Date(); var tDate = today.getDate(); var tMonth = today.getMonth(); var startingDate = new Date(); var sDate = startingDate.setDate(1);

对于粒子js,我有两种配置(json)。其中一个是冬天,所以从21岁开始应该是活跃的。十二月至二十一日。前进我尝试了很多事情,但仍然没有成功(不是因为现在仍然是11月:) 我最后试过的就是这个

var today = new Date();
var tDate = today.getDate();
var tMonth = today.getMonth();

var startingDate = new Date();
var sDate = startingDate.setDate(1);
var sMonth = startingDate.setMonth(10);

var endingDate = new Date();
var eDate = endingDate.setDate(21);
var eMonth = endingDate.setMonth(2);

if (tMonth >= sMonth && tMonth <= eMonth) {
    if (tDate >= sDate && tDate <= eDate) {
        particlesJS.load('particles', '../../Content/Scripts/particles/particles-config-winter.json');
    }
}
else {
    particlesJS.load('particles', '../../Content/Scripts/particles/particles-config.json');
}
var today=新日期();
var tDate=today.getDate();
var tMonth=today.getMonth();
var startingDate=新日期();
var sDate=开始日期。设置日期(1);
var sMonth=开始日期。设置月(10);
var endingDate=新日期();
var eDate=endingDate.setDate(21);
var eMonth=endingDate.setMonth(2);

如果(tMonth>=sMonth&&tMonth=sDate&&tDate您可以使用此功能:

function isWinter(dt) {
    const m = dt.getMonth();
    return m == 11 ? dt.getDate() >= 21 : m == 2 ? dt.getDate() < 21 : m < 2;
}
尝试中的一个问题是
setMonth
setDate
方法将修改后的日期返回为毫秒数(不仅仅是一个月或一天的部分),并更改调用该方法的日期

功能说明: 三元表达式使用以下逻辑:

  • 如果月份是12月(11日),则当月份的日期至少为21时返回true,否则返回false:这就是
    dt.getDate()>=21
    计算结果(true或false)
  • 否则,如果月份是3月(2),则当月份的日期小于21时返回true,否则返回false:原则与上述相同,但相反
  • 否则,当月份在3月份之前(<2)时返回true,否则返回false:这就是
    m<2
    的计算结果

日期操作一直是一个难题。如果您不介意库为您处理此问题,我建议您查看哪些库使日期和时间操作更容易。但是,您添加的每个库都会添加不必要的代码,而您可能不需要这些代码。因此,如果您只需要执行一些日期操作,则可能不值得,而且很值得是完美的,如果你真的不需要MomentJs

按照trincot的回答,这就是你在MomentJs中做同样事情的方式:

函数isWinter(日期){
date.year(moment().year());//标准化年份。
冬季开始=力矩('21-12','DD-MM');
设winterEnd=力矩('21-03','DD-MM');
return!date.isBetween(winterEnd,winterStart,'day')
}
//测试:
让今天=时刻('20-12','DD-MM');
警报(isWinter(今天));//错误
今天=时刻(“21-12”、“DD-MM”);
警报(isWinter(今天));//正确
今天=时刻('21-03','DD-MM');
警报(isWinter(今天));//正确
今天=时刻('22-03','DD-MM');
警报(isWinter(今天));//错误
今天=时刻('2019年3月22日,'DD-MM-YYYY');
警报(isWinter(今天));//错误
今天=时刻('2019年3月21日,'DD-MM-YYYY');
警报(isWinter(今天));//正确

要解释代码不起作用的原因:

var today = new Date();
var tDate = today.getDate();
var tMonth = today.getMonth();

var startingDate = new Date();

// This sets the date to the first of the month, and sets sDate to a number
// that is the time value of the adjusted date
var sDate = startingDate.setDate(1);

// This sets the month to November and sMonth to the adjusted time value
var sMonth = startingDate.setMonth(10);

var endingDate = new Date();

// As above, this sets endingDate to 21 March and sets eDate and eMonth to numbers
var eDate = endingDate.setDate(21);
var eMonth = endingDate.setMonth(2);

// This will never be true after 1970-01-01 as you're comparing a months to a time values
if (tMonth >= sMonth && tMonth <= eMonth) {
  if (tDate >= sDate && tDate <= eDate) {
var today=新日期();
var tDate=today.getDate();
var tMonth=today.getMonth();
var startingDate=新日期();
//这会将日期设置为每月的第一天,并将sDate设置为一个数字
//这是调整日期的时间值
var sDate=开始日期。设置日期(1);
//这会将月份设置为11月,并将月份设置为调整后的时间值
var sMonth=开始日期。设置月(10);
var endingDate=新日期();
//如上所述,这将endingDate设置为3月21日,并将eDate和eMonth设置为数字
var eDate=endingDate.setDate(21);
var eMonth=endingDate.setMonth(2);
//这在1970-01-01之后将永远不会是真的,因为您正在将一个月与一个时间值进行比较

如果(tMonth>=sMonth&&tMonth=sDate&&tDate如果你不介意图书馆帮你处理这个问题,我建议你看看哪一个可以方便地处理日期和时间。哇……我甚至都不知道这个存在。你能把这个作为答案,这样我就可以标记它了。非常感谢!!!如果今天的日期是在一月份,那么结束日期就错了我们不能增加它的年份,但开始日期需要减少一年。注:冬天不是从11月1日开始;-)我们都知道冬天是从12月21日开始的…但我太激动了,无法检查这是否有效,所以我不能等到那时…这就是为什么11月…;)图书馆推荐不是答案。@RobG你是对的,这就是为什么我在帖子的评论中建议它,而不是作为答案创建它。我决定用任何方式去做,以防他想走任何一条路:)但我会记住的!我知道这很管用,我试过了……但你能解释一下怎么做吗。你用两个三元运算符把我弄丢了。。。我以前从未见过它…我试图将它分解为if语句以便我能理解,但我运气不好…我在答案中添加了一个解释。
var today = new Date();
var tDate = today.getDate();
var tMonth = today.getMonth();

var startingDate = new Date();

// This sets the date to the first of the month, and sets sDate to a number
// that is the time value of the adjusted date
var sDate = startingDate.setDate(1);

// This sets the month to November and sMonth to the adjusted time value
var sMonth = startingDate.setMonth(10);

var endingDate = new Date();

// As above, this sets endingDate to 21 March and sets eDate and eMonth to numbers
var eDate = endingDate.setDate(21);
var eMonth = endingDate.setMonth(2);

// This will never be true after 1970-01-01 as you're comparing a months to a time values
if (tMonth >= sMonth && tMonth <= eMonth) {
  if (tDate >= sDate && tDate <= eDate) {