如果天数为31,那么月份为1 且天为31 。
如果天数为38,则月份为2,日期为7。
如果年份是长年,那么一年中的总天数是366,如果它不是一年中的总天数是365.
如此。假设年份不是长年(365天)。所以,如果我把日数计算为334.月份应该是11(11月),而日期应该是30,但我不能得到。我按照以下方式行事。
function test(days){
var day;
var month;
if(days<=31){
month=1;
day=days;
}
else if(days<=59){
month=2;
day=days-31;
}
else if(days<=90){
month=3;
day=days-59;
}
else if(days<=120){
month=4;
day=days-90;
}
else if(days<=151){
month=5;
day=days-120;
}
else if(days<=181){
month=6;
day=days-151;
}
else if(days<=212){
month=7;
day=days-181;
}
else if(days<=243){
month=8;
day=days-212;
}
else if(days<=273){
month=9;
day=days-243;
}
else if(days<=304){
month=10;
day=days-273;
}
else if(days<=334){
month=11;
day=days-304;
}
else if(days<=365){
month=12;
day=days-334;
}
alert(month);
alert(day);
}
答案 0 :(得分:4)
保持简单愚蠢(KISS):
var year = 2013
var day_of_year = 1
var d = new Date(year, 0, day_of_year)
var day_of_month = d.getDate()
var month_of_year = d.getMonth() + 1
console.log(day_of_month)
console.log(month_of_year)
<强>附录:强>
关于你在评论中提出的问题(我可能已经过度疲惫,因为我不再看到评论了),为了得到某一年的日子,你可以做到以下几点:
var baseYear = 1992
var baseDate = new Date(baseYear, 0);
var extendedDate = new Date(baseYear + 1, 0, 0);
var daysInYear = 1 + ((extendedDate - baseDate) / 86400000)
console.log(daysInYear)
答案 1 :(得分:2)
您可以使用少量代码确定月份(注意,无边界检查):
function getMonth(day) {
var i = 0;
var sum = 0;
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
while(sum < day) {
sum += days[i++];
}
return i;
}
甚至:
function getMonth(day) {
var i = 0,
days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
for (var sum = 0; sum < day; sum += days[i++]);
return i;
}
包括当月的日期:
function getMonthAndDay(day) {
var i = 0, sum = 0;
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
while(sum < day) {
sum += days[i++];
}
return [i, day - sum + days[i - 1]];
}
答案 2 :(得分:1)
var myDate=new Date(); //new date to get current year
myDate = new Date(myDate.getFullYear(), 0, 1); //set to 1st of January (this year)
var x = 334; //the day shift needed
myDate.setDate(myDate.getDate() + (x - 1)); //add the days to the date object we already built
var month = (myDate.getMonth() + 1); //get the month. Add 1 since it's zero based
var day = myDate.getDate(); //get the day of month
alert(month + ' ' + day); //do what you need to
在我的代码的注释中添加了整个过程说明。可以稍微简化一下,但我想确保您了解整个算法。
基本上,您需要在年初开始,添加所需的日期,并询问您的对象此时的日期和日期。
答案 3 :(得分:0)
它对我来说很好。在这里测试http://jsfiddle.net/PcZQ3/。刚看到代码中的拼写错误。您已将function
声明为funtion
。
答案 4 :(得分:0)
另一种方法:
function test(dayCount) {
var isLeapyear = false;
var daysByMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
if (isLeapyear)
daysByMonth = [31,29,31,30,31,30,31,31,30,31,30,31];
var month = 1;
var day = 1;
var days = 0;
for (i = 0; i < 12; i++) {
if ( days + daysByMonth[i] > dayCount)
{
day = (dayCount - days);
break;
}
days += daysByMonth[i];
month++;
}
console.log('month : ' + month + ' - day : ' + day);
}
test(38);
答案 5 :(得分:0)
如果有人来这里寻找一年中的月份和日期,最好的方法是使用预先存在的库momentjs。
这是使用节点的示例。首次运行npm install moment
后,您可以执行此操作:
> var moment = require('moment')
> var d = moment().dayOfYear(334)
undefined
> d.format()
'2013-11-30T23:45:36-08:00'
> [d.month()+1, d.date()]
[ 11, 30 ]
+1
是因为时刻使用从0开始的月份数字。
图书馆负责夏令时,时区,闰年以及您不想在自己的代码中编写的类似内容,除非您正在学习,练习或玩乐。
<强>附录强>
Sg'te'gmuj展示了如何使用普通JavaScript(不需要第三方库)来实现这一目标。以下是该解决方案的功能:
> function monthAndDay(year, dayOfYear) {
var date = new Date(year, 0, dayOfYear);
return [date.getMonth() + 1, date.getDate()]
}
非常可爱。无论是闰年还是非闰年,它都在行动中:
> monthAndDay(2013, 334)
11,30
> monthAndDay(2012, 334)
11,29