我从服务器得到的响应是“本地”时间戳。
这意味着我的本地时间以UTC毫秒表示,但没有UTC偏移量。
例如:
1537747200000
是
Mon Sep 24 2018 00:00:00 UTC
Mon Sep 24 2018 03:00:00 EEST (my local time)
但是在我看来,这个日期实际上是
Mon Sep 24 2018 00:00:00 EEST
,所以我的时区是UTC值。
如果需要的话,我现在想用时刻和时刻时区来显示这个。
所以我想知道的是如何创建一个新的时刻对象
"LOCAL milliseconds"?
如果需要的话,我会通过1537747200000和我的本地时区,我可以把它显示为
2018年9月24日周一00:00:00欧洲东部时间
我发现使用Moment Timezone+Utcoffset可以达到这个目的,但我不知道这是否是一个好方法。
utc offset docs says this:
通过提供分钟设置UTC偏移量。请注意,一旦设置了偏移量,它是固定的,不会自行更改(即没有DST规则)。如果你想要一个实际的时区——在一个特定地点的时间,比如美国/洛杉矶,考虑一下时刻时区。
另一种方法是将力矩格式化为isoString
moment(1537747200000).toISOString()
然后分析得到的字符串,不包含时区信息(“z”)。分析字符串时,可以在另一个时区分析它。
moment.tz(moment(1537747200000).toISOString().slice(0, -1), tz)
. 但这需要我解析->格式->解析值,因此需要进行大量的额外操作。
const [one, two, thr] = ["exp","tr","appr"];
const display = (toAdd, id) => document.getElementById(id).innerHTML += `<br/> ${toAdd}`;
const formatString = "MMM D, YYYY HH:mm z";
const tz = moment.tz.guess();
const millis_24_sep_00_00_utc = moment.utc("24-09-2018", "DD-MM-YYYY", true).valueOf(); //1537747200000
const isoString = moment(millis_24_sep_00_00_utc).toISOString();
//exp
display(tz, one);
display(millis_24_sep_00_00_utc, one);
const ex = moment.tz(millis_24_sep_00_00_utc, tz).utc().format("MMM D, YYYY HH:mm")
display(`${ex} ${moment().tz(tz).zoneAbbr()} <- local tz`, one);
//tr
[
moment(millis_24_sep_00_00_utc).tz(tz),
moment.utc(new Date(millis_24_sep_00_00_utc)).tz(tz),
moment.tz(millis_24_sep_00_00_utc, tz).utc(),
moment.tz(isoString, tz),
]
.forEach(mom => display(mom.format(formatString), two));
//some approaches
[
//setting utcOffset to 0
moment.tz(millis_24_sep_00_00_utc, tz).utcOffset(0),
//iso string to transform millis -> string -> parse the string in another tz
moment.tz(isoString.slice(0, -1), tz),
]
.forEach(mom => display(mom.format(formatString), thr));
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.21/moment-timezone-with-data.js"></script>
<title>Test</title>
</head>
<body>
<div id="exp">EXPECTED</div>
<hr/>
<div id="tr">TRIES</div>
<hr/>
<div id="appr">APPROACHES</div>
</body>
</html>