Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 相对于当前日期显示生日的时刻DAYOFYEAR_Javascript_Angularjs_Date_Momentjs - Fatal编程技术网

Javascript 相对于当前日期显示生日的时刻DAYOFYEAR

Javascript 相对于当前日期显示生日的时刻DAYOFYEAR,javascript,angularjs,date,momentjs,Javascript,Angularjs,Date,Momentjs,我正在Angular应用程序中使用moment(),我需要显示与一周中当前日期相关的生日(不考虑年份)。我的服务器将以YYYY-MM-DD格式发送本周的出生日期列表,我希望这样显示(考虑到今天的日期是2017年3月2日): 在Angular 1.5视图中,我可以将数据发送到dayCheck函数,如下所示: <p ng-repeat="person in birthdays"> Name: {{person.name}} <br> When: {{vm.dayChe

我正在Angular应用程序中使用
moment()
,我需要显示与一周中当前日期相关的生日(不考虑年份)。我的服务器将以
YYYY-MM-DD
格式发送本周的出生日期列表,我希望这样显示(考虑到今天的日期是2017年3月2日):

在Angular 1.5视图中,我可以将数据发送到
dayCheck
函数,如下所示:

<p ng-repeat="person in birthdays">
  Name: {{person.name}} <br>
  When: {{vm.dayCheck(person.date)}}
</p>

function dayCheck(date) {
   return moment(date).format('DD'); // ?? How can I return the days relative to user's day from this year??
}
请务必让我知道,如果有更好的,优雅的方式做上述。我还怀疑,如果生日是闰年的2月29日,上述方法也会失败。

你可以简单地利用这个时刻。要自定义格式,请参见。下面是一个工作示例:

var输入=['2014-03-01',
'2016-03-02',
'2015-03-03',
'2014-03-04'];
功能日检查(日期){
var thisYear=时刻().year();
var mom=时间(日期)。年份(本年);
返回mom.calendar(null{
萨米代:“[今天]”,
下一天:“[明天]”,
下一周:“dddd”,
最后一天:“[昨天]”,
上周:“[Last]dddd”,
sameElse:'DD/MM/yyyyy'
});
}

对于(var i=0;i,只是为了完整性,因为不是每个人都使用moment.js,如果没有库,它只需要几个简单的函数来解析字符串、获取日期名称等:

var myLib={日期:{
//如果notStrict为true,则不检查有效日期
ParseIsLocal:函数(s,notStrict){
var b=s.split(/\D/);
var d=新日期(b[0],--b[1],b[2]);
return notStrict | |(d&d.getMonth()==b[1])?d:新日期(NaN);
},
daysDiff:函数(a,b){
var diff=新日期(a).设定小时数(12,0,0)-新日期(b).设定小时数(12,0,0,0);
返回四舍五入(差/8.64e7);
},
dayName:函数(d){
返回d.tolocalString(未定义,{工作日:'long'});
}
}};
['2014-03-01','2016-03-02','2015-03-03','2010-03-04','2007-03-05',
'1914-03-06','1987-03-07','1800-03-08','1991-03-24','2004-01-04',
“2000-02-29”]。forEach(函数){
s=s.replace(/^\d{4}/,new Date().getFullYear());
var d=myLib.date.parseISOLocal(s,true);
var diff=myLib.date.daysDiff(d,new date());
如果(diff>7 | | diff<-7)msg=d.tolocalString(未定义,{天:'numeric',月:'long'});
否则,如果(差异<-1)消息='Last'+myLib.date.dayName(d);
如果(diff=-1)msg='昨天('+myLib.date.dayName(d)+');
如果(diff==0)msg='Today';
如果(diff==1)msg='tomory('+myLib.date.dayName(d)+');
else msg='Next'+myLib.date.dayName(d);
log(d.tolocalString(未定义,{天:'numeric',月:'short',年:'numeric'})
+“:”+msg);

})
Oh man!太棒了!!!这正是我想要的。我的方法就像《指环王》一样,而你的方法是如此简单和完美!非常感谢@VincenzoC!!我很高兴我的答案帮助了你。我没有足够的时间来测试闰年,它是否提供了正确的输出?这些情况下的预期结果是什么?日期是什么时候闰年的2月29日,它显示3月1日作为输出。作为测试,我将计算机日期改为2月24日,然后将2月29日显示为“星期三”这实际上是今年的3月1日。我认为在这种情况下,这是理想的输出。因此,如果您尝试使用无效的日期字符串(如“2017-02-29”)创建日期,则一切都很好。@Neel(但不使用
new date(2017,1,29)
)结果应该是一个无效的日期。@Neel-我明白你的困境:在非闰年中,2月29日的生日该怎么办。不同的司法管辖区有不同的规则:一些去2月28日,一些去3月1日,个人偏好相同。走哪条路没有正确或错误的答案。谢谢@RobG这些功能肯定会立即有所帮助。js、 一个很好的替代方案。
<p ng-repeat="person in birthdays">
  Name: {{person.name}} <br>
  When: {{vm.dayCheck(person.date)}}
</p>

function dayCheck(date) {
   return moment(date).format('DD'); // ?? How can I return the days relative to user's day from this year??
}