问题描述
我的问题是如何在不同的时区获得相同的日、月、年、时、分、秒,例如:
My question is how can I get the same day, month, year, hour, minutes, seconds in a different time zone, for example:
var now = moment().valueOf();
var result1 = moment(now).format('DD-MM-YYYY HH:mm:SS Z');
在我的时区,我得到这样的结果:
In my time zone I get some this like this:
18-02-2015 21:08:34 +01:00
那么我怎样才能只更改时区而不更改其他值(天、月、...、分钟、...)
So how can I change only time zone without changing other values (days, months, ..., minutes, ...)
我想得到这样的东西:
result2: 18-02-2015 21:08:34 +01:00
result3: 18-02-2015 21:08:34 +10:00
result4: 18-02-2015 21:08:34 +05:00
result5: 18-02-2015 21:08:34 -06:00
result6: 18-02-2015 21:08:34 -11:00
提前致谢
推荐答案
以下是您可以按照您的要求进行操作的方法:
Here's how you could do what you are asking:
// get a moment representing the current time
var now = moment();
// create a new moment based on the original one
var another = now.clone();
// change the offset of the new moment - passing true to keep the local time
another.utcOffset('+05:30', true);
// log the output
console.log(now.format()); // "2016-01-15T11:58:07-08:00"
console.log(another.format()); // "2016-01-15T11:58:07+05:30"
但是,您必须认识到两件重要的事情:
However, you must recognize two important things:
another
对象不再代表当前时间 - 即使在目标时区.这是一个完全不同的时刻.(世界不会同步本地时钟.如果同步了,我们就不需要时区了!).
The
another
object no longer represents the current time - even in the target time zone. It's a completely different moment in time. (The world does not synchronize local clocks. If it did, we'd have no need for time zones!).
因此,即使上面的代码满足了所提出的问题,我强烈建议不要使用它.相反,请重新评估您的要求,因为他们可能误解了时间和时区的性质.
For this reason, even though the above code satisfies the question that was asked, I strongly recommend against using it. Instead, re-evaluate your requirements, as it's likely they are misunderstanding the nature of time and time zones.
时区不能仅由偏移量来完全表示.在 时区标签 wiki 中阅读时区!= 偏移量".虽然某些时区有固定的偏移量(例如印度使用的 +05:30),但许多时区会在一年中的不同时间点改变它们的偏移量以适应 夏令时.
A time zone cannot be fully represented by an offset alone. Read "Time Zone != Offset" in the timezone tag wiki. While some time zones have fixed offsets (such as +05:30 used by India), many time zones change their offsets at different points throughout the year to accommodate daylight saving time.
如果你想解决这个问题,你可以使用 moment-timezone 而不是调用 utcOffset(...).但是,我的第一个项目符号中的问题仍然适用.
If you wanted to account for this, you could use moment-timezone instead of calling utcOffset(...)
. However, the issue in my first bullet would still apply.
// get a moment representing the current time
var now = moment();
// create a new moment based on the original one
var another = now.clone();
// change the time zone of the new moment - passing true to keep the local time
another.tz('America/New_York', true); // or whatever time zone you desire
// log the output
console.log(now.format()); // "2016-01-15T11:58:07-08:00"
console.log(another.format()); // "2016-01-15T11:58:07-05:00"
这篇关于不同时区的同一日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!