Javascript中的月/日比较

Javascript中的月/日比较,javascript,php,Javascript,Php,我不是JavaScript方面的专家,但我的任务是将一个非常大的网站(用PHP编码)迁移到一个不允许使用服务器端语言的新CMS中。因此,我每天都在将许多PHP日期计算器转换为JavaScript PHP中的一些非常简单的东西: <?php if (date('md') < 816) {$award_year = date('Y');} if (date('md') > 815) {$award_year = date('Y') + 1;} /*echo "year ".$aw

我不是JavaScript方面的专家,但我的任务是将一个非常大的网站(用PHP编码)迁移到一个不允许使用服务器端语言的新CMS中。因此,我每天都在将许多PHP日期计算器转换为JavaScript

PHP中的一些非常简单的东西:

<?php 
if (date('md') < 816) {$award_year = date('Y');}
if (date('md') > 815) {$award_year = date('Y') + 1;}
/*echo "year ".$award_year;*/
?>
这允许申请将于8月15日后自动更改为下一年

我一直在尝试用Javascript重现这种效果,下面是我的想法:

var today = new Date();
var mm = today.getMonth()+1; //January is 0! 
var dd = today.getday();
if (mm < 10) {
    mm = '0'+mm
} 

currDate = mmdd;
var currDate = new Date(); 
var appDate = new Date("0816");

if (currDate < appDate){
var printDate = theDate.getFullYear();  
}

else if (currDate >= appDate){
var printDate = theDate.getFullYear()+1;      
}

我知道我遗漏了一些东西,因为var currDate不能只是=mmdd然后与另一个日期进行比较。有人能帮我做下一步吗?我正在努力学习JavaScript,而不是盲目地解决问题

不必组合字符串并比较两个日期,您可以检查当前日期和月份以确定返回哪一年

比如说,

function getAwardYear() {
  const today = new Date()
  const AUGUST = 7

  if (today.getMonth() >= AUGUST && today.getDate() > 15) {
    return today.getFullYear() + 1
  }

  return today.getFullYear()
}

// Today: 6th Jun 2018
getAwardYear() // 2018

// Today: 16th Aug 2018
getAwardYear() // 2019

您可以检查当前日期和月份以确定返回哪一年,而不是合并字符串并比较两个日期

比如说,

function getAwardYear() {
  const today = new Date()
  const AUGUST = 7

  if (today.getMonth() >= AUGUST && today.getDate() > 15) {
    return today.getFullYear() + 1
  }

  return today.getFullYear()
}

// Today: 6th Jun 2018
getAwardYear() // 2018

// Today: 16th Aug 2018
getAwardYear() // 2019

我知道下面的代码有很多东西需要即兴创作。。。我把它留给你即兴创作

var today=新日期; var mm=今天。getMonth+1//一月是零! var dd=today.getDay; 如果mm<10{ 毫米='0'+毫米 } 变量yyyy=2018 var currDate=新日期YYYY+-+mm+-+dd; var appDate=新日期2018-01-16; alertappDate+appDate; alertcurrDate+currDate; 如果currDate=appDate,则为else{ var printDate=appDate.getFullYear+1; 警报打印日期;
}我知道下面的代码有很多东西需要即兴创作。。。我把它留给你即兴创作

var today=新日期; var mm=今天。getMonth+1//一月是零! var dd=today.getDay; 如果mm<10{ 毫米='0'+毫米 } 变量yyyy=2018 var currDate=新日期YYYY+-+mm+-+dd; var appDate=新日期2018-01-16; alertappDate+appDate; alertcurrDate+currDate; 如果currDate=appDate,则为else{ var printDate=appDate.getFullYear+1; 警报打印日期;
}这将类似于您的PHP代码:

const date=新日期; const day=date.getUTCDate; const month=date.getMonth; const md=月+日; 如果md<816{ var award_year=date.getFullYear; } 否则,如果md>815{ var award_year=date.getFullYear+1; }
console.logu年度 这将类似于您的PHP代码:

const date=新日期; const day=date.getUTCDate; const month=date.getMonth; const md=月+日; 如果md<816{ var award_year=date.getFullYear; } 否则,如果md>815{ var award_year=date.getFullYear+1; }

console.logu年度;CMS如何不允许服务器端语言?它怎么会知道呢?这是什么CMS?如果日期'md'小于816,它将字符串与整数进行比较。你为什么这么做?请使用正确的日期比较。@delboy1978uk我不知道,但我知道PHP不受支持。@Andreas请阅读问题。无论如何,在php中这样做是完全有效的,因为它正确地将类型转换为适当的int。如果您不相信我,请尝试一下。CMS怎么可能不允许服务器端语言?它怎么会知道呢?这是什么CMS?如果日期'md'小于816,它将字符串与整数进行比较。你为什么这么做?请使用正确的日期比较。@delboy1978uk我不知道,但我知道PHP不受支持。@Andreas请阅读问题。无论如何,在php中这样做是完全有效的,因为它正确地将类型转换为适当的int。如果您不相信我,请尝试一下。谢谢。这对我来说很有意义,而且比我想做的要简单得多。感谢您花时间帮助我,因为这段代码对我来说是一次很好的学习经历!祝你有一个美好的一天在JavaScript 0=1月的时候8月9日不是吗?@beingbeing,我很高兴它有帮助。因为它是零指数,就像你提到的,你从数字中减去一——一月是第一个月,所以变成了0,八月是第八个月,所以变成了7。您可以在devtools中尝试这一点,例如,new Date'2018/08/16'.getMonth//7@beingbecoming .... 你可以在JSFIDLE中自己尝试一下,而不是问这些问题……谢谢你@Craig Ayre我很清楚地误解了一些东西,但这非常有帮助,我认为这将有助于我在未来向你提供更多的计算。这对我来说很有意义,而且比我想做的要简单得多。感谢您花时间帮助我,因为这段代码对我来说是一次很好的学习经历!祝你有一个美好的一天在JavaScript 0=1月的时候8月9日不是吗?@beingbeing,我很高兴它有帮助。因为它是零指数,就像你提到的,你从数字中减去一——一月是第一个月,所以变成了0,八月是第八个月,所以变成了7。您可以在devtools中尝试这一点,例如,new Date'2018/08/16'.getMonth//7@beingbecoming .... 你可以自己在jsfiddle中尝试,而不用问
这些问题…谢谢你@Craig Ayre我很清楚地误解了一些东西,但这是非常有帮助的,我认为这将有助于我在未来进行更多的计算