我使用此代码创建了代表过滤日期范围的2个日期(在本例中为过去3个月):
$ctrl.startDate = moment().utc().startOf('month').add(-2, 'months').toDate();
$ctrl.endDate = moment().utc().endOf('month').add(0, 'months').toDate();
然而,第一个返回日期是时区CET(GMT + 1)(这是我的区域),第二个是CEST(GMT + 2)。我不知道为什么!我尝试过使用utc()来获得"中立"约会没有成功。
返回日期:
01.01.2017 01:00:00 CET
01.04.2017 01:59:59 CEST
我想要GMT或CET,但相同区域!瞬间从这两个区域开始?
到目前为止,我认为这是一个错误。
我使用版本2.17.1
有什么想法吗?
的jsfiddle: https://jsfiddle.net/FLhpq/8807/
答案 0 :(得分:0)
我不知道你是否可以认为这是一个错误,你在toDate()
的结果中显示的那个错误正如文档所说:
获取Moment.js包装的本机Date对象
如果您查看momentjs the code,您会看到toDate()
实施:
function toDate () {
return new Date(this.valueOf());
}
只需使用new Date()
在本地时间内返回JavaScript日期对象,请参阅MDN Date:
注意:如果将Date作为具有多个参数的构造函数调用,则指定的参数表示本地时间。如果需要UTC,请使用具有相同参数的新日期(Date.UTC(...))。
如果您在代码中使用format()
,则会始终看到+00:00
偏移。
var divUtc = $('#divUTC');
var divLocal = $('#divLocal');
var startDate = moment.utc().startOf('month').add(-2, 'months').format('YYYY-MM-DDTHH:mm:ssZ');
var endDate = moment.utc().endOf('month').add(0, 'months').format('YYYY-MM-DDTHH:mm:ssZ');
//put UTC time into divUTC
divUtc.text(startDate);
divLocal.text(endDate);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.7/moment-timezone-with-data-2010-2020.min.js"></script>
UTC<br/>
<div id="divUTC"></div><br/>
Your Local Time with respect to above UTC time<br/>
<div id="divLocal">
</div>
&#13;