我有utc date 2017-04-22T21:03:54
(本地日期是2017-04-23 00:03:54,偏移+3)
我想从服务器获取数据1天。对于此示例,本地日期为:
start: 2017-04-23 00:00:00
end: 2017-04-23 23:59:59
服务器的UTC参数:
start: 2017-04-22 21:00:00
end: 2017-04-23 20:59:59
我怎么能用moment.js收到这个日期?本地偏移量可能不同
我试试:
moment.utc(startTime).format() // 2017-04-22T21:03:54Z, but I need 2017-04-22T21:00:00Z
// for example, if local timezone will be +6, I need 2017-04-22T18:00:00Z
答案 0 :(得分:1)
我有约会日期2017-04-22T21:03:54
没有时区的日期字符串被视为本地(ISO 8601仅限日期的表单除外,ECMAScript将其视为UTC,与ISO 8601相反)。如果你想将像“2017-04-22 21:00:00”这样的字符串视为UTC,那么你必须告诉解析器(在moment.js中你可以使用utc方法)。
您还应该始终告诉解析器它尝试解析的格式,否则您希望它能够正确猜测。如果使用 utc ,则默认使用偏移量+0000(“UTC mode”*),而不是本地偏移量。如果需要主机偏移量,可以使用 local 方法或转换为Date对象并使用内置方法。
var s = '2017-04-22 21:00:00';
var format = 'YYYY-MM-DD HH:mm:ss';
// Tell parser to treat as UTC and the format
var m = moment.utc(s, format);
// Once the string has been parsed, you can output it in any format you like
console.log(
'Original format, offset +0000 : ' + m.format(format)
+'\nBuilt-in toISOString, offset Z: ' + m.toDate().toISOString()
+'\nBuilt-in toString, host offset: ' + m.toDate().toString()
+'\nOriginal format, host offset : ' + m.local().format(format)
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
*我不确定这是个好主意,因为这意味着使用该对象的代码需要知道它是在UTC模式下。如果你从其他地方获得了一个moment.js对象,那么将它设置为你想要的“模式”是一个好习惯。多次调用本地或 utc 没有任何不良影响。
答案 1 :(得分:1)
(把我的评论作为答案)
Z
,请参阅链接)。这些约定消除了客户端和服务器之间关于时间字面表示的时刻的任何歧义。现在可以说,如果您需要使用MomentJS在UTC / Node中将UTC时间转换为本地时间,请使用Moment&#39; local()
。