Angularjs日期过滤器和时刻js返回年份';1970年&x27年;设置年份格式时
我有一个从服务器获取的对象,这个对象有一个属性:Angularjs日期过滤器和时刻js返回年份';1970年&x27年;设置年份格式时,angularjs,momentjs,Angularjs,Momentjs,我有一个从服务器获取的对象,这个对象有一个属性:obj.year:“2017”,例如。该属性是一个编号。 我只需要显示年份的最后两位数字。 当我将其格式化为HTML时,如下所示: {{obj.year | date : 'yy'}} 它显示:70。我尝试了各种内置的角度年过滤器,并尝试了矩js格式化功能: function formatYear(year) { return moment(year).format('YY'); } 但它仍然返回1970年。 我不明白为什么它今
obj.year:“2017”
,例如。该属性是一个编号
。
我只需要显示年份的最后两位数字。
当我将其格式化为HTML时,如下所示:
{{obj.year | date : 'yy'}}
它显示:70
。我尝试了各种内置的角度年过滤器,并尝试了矩js
格式化功能:
function formatYear(year) {
return moment(year).format('YY');
}
但它仍然返回1970年。
我不明白为什么它今年会返回,而这只会在格式化时发生?如果我没有对其应用任何格式,它将返回对象的正常值-2017过滤器的文档解释了发生这种情况的原因。它期望您提供的值是Date
对象、日期字符串或以毫秒为单位的数字
以下是他们的描述:
将日期格式化为日期对象、毫秒(字符串或数字)或各种ISO 8601日期时间字符串格式(例如yyyy-MM-ddTHH:MM:ss.sssZ及其较短版本,如yyyy-MM-ddTHH:mmZ、yyyy-MM-dd或YYYYYYMMDDHMMSSZ)。如果字符串输入中未指定时区,则该时间被视为在本地时区中
您获得1970年的原因是b/c日期
过滤器将您的2017年解释为自纪元或之后的毫秒数
要使日期
过滤器工作,您只需将年份值转换为日期
(或使用矩时的类似方法):
{{obj.year | date:'yy'}
输出70
的原因是您将编号2017
传递给angular的date
过滤器,这样做相当于新日期(2017年)
返回的日期和时间为2017
毫秒,从1970-01-01 00:00:00:000
或准确地说1970-01-01 00:00:02:017
。因此,当您使用yy
格式字符串运行angular的date
过滤器时,您会得到年份的最后两位数,当然是70
要提供替代解决方案,您可以使用angular的过滤器:
正如其他答案所述,您得到的是
70
而不是17
,因为角度过滤器接受:
日期对象、毫秒(字符串或数字)或各种ISO 8601日期时间字符串
因此,您的输入被解释为自1970年1月1日00:00:00以来的毫秒数,基本上相当于:
console.log(新日期(2017));//1970-01-01T00:00:02.017Z
momentJs接受完整日期作为字符串或时间戳。例如:时刻('2016-08-20')。格式('YY');矩(newdate().getTime()).format('YY');谢谢,我喜欢你的解释,我认为它很容易理解,对其他人也很有用。谢谢,你的建议实际上解决了我的问题。在我看来,文档有点不清楚,首先我认为后端以错误的格式向我传递数据。
var date = new Date(obj.year, 0,1); // Jan 1
{{ obj.year | limitTo : 2 : 2 }}