moment.js返回不同的时区

时间:2017-03-09 20:12:00

标签: javascript timezone momentjs utc timezone-offset

我使用此代码创建了代表过滤日期范围的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/

1 个答案:

答案 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;
&#13;
&#13;