重置时区感知时间戳 momentjs
Reset timezone aware timestamp momentjs
我正在使用 momentjs 进行日期操作,并且想编写一个场景,如果给出了时间戳和时区名称,那么我想将时间重置为午夜。例如
let timestamp = 1493638245234;
expect(new Date(timestamp).toISOString()).toBe('2017-05-01T11:30:45.234Z'); // Time in UTC
let truncatedTimestamp = functionName(timestamp, 'America/Los_Angeles');
console.log(truncatedTimestamp);
expect(new Date(truncatedTimestamp)).toBe('2017-05-01T04:00:00.000Z');
const functionName = (timestamp, timezone) => {
return moment
.tz(timestamp, timezone)
.startOf('day')
.toDate()
.getTime();
};
我想要函数 'functionName'
到 return America/Los_Angeles
时间的午夜,而不是 UTC。
我输入的时间戳是 2017 年 5 月 5 日,11:30 上午 UTC。
我希望函数 return 我在 2017 年 5 月 5 日的时间戳,00:00 America/Los_Angeles
(自 2017 年 5 月 5 日 11:30 AM UTC 将是 11:30 AM -7 小时在 America/Los_Angeles
.) 并将其转换为毫秒。
您必须删除使用当地时间给出 JavaScript 日期对象的 toDate()
。然后你可以使用 valueOf()
而不是 getTime()
.
moment#valueOf
simply outputs the number of milliseconds since the Unix Epoch, just like Date#valueOf
.
您的代码可能如下所示:
const functionName = (timestamp, timezone) => {
return moment(timestamp)
.tz(timezone)
.startOf('day')
.valueOf();
};
let timestamp = 1493638245234;
let truncatedTimestamp = functionName(timestamp, 'America/Los_Angeles');
console.log(truncatedTimestamp);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.17/moment-timezone-with-data-2012-2022.min.js"></script>
我将我的函数 functionName 修改成这样并且它起作用了。
const functionName = (timestamp, timezone) =>
moment
.tz(timestamp, timezone)
.startOf('day')
.valueOf();
注意:一些用户发布了这个答案,但他们删除了他们的答案。
我正在使用 momentjs 进行日期操作,并且想编写一个场景,如果给出了时间戳和时区名称,那么我想将时间重置为午夜。例如
let timestamp = 1493638245234;
expect(new Date(timestamp).toISOString()).toBe('2017-05-01T11:30:45.234Z'); // Time in UTC
let truncatedTimestamp = functionName(timestamp, 'America/Los_Angeles');
console.log(truncatedTimestamp);
expect(new Date(truncatedTimestamp)).toBe('2017-05-01T04:00:00.000Z');
const functionName = (timestamp, timezone) => {
return moment
.tz(timestamp, timezone)
.startOf('day')
.toDate()
.getTime();
};
我想要函数 'functionName'
到 return America/Los_Angeles
时间的午夜,而不是 UTC。
我输入的时间戳是 2017 年 5 月 5 日,11:30 上午 UTC。
我希望函数 return 我在 2017 年 5 月 5 日的时间戳,00:00 America/Los_Angeles
(自 2017 年 5 月 5 日 11:30 AM UTC 将是 11:30 AM -7 小时在 America/Los_Angeles
.) 并将其转换为毫秒。
您必须删除使用当地时间给出 JavaScript 日期对象的 toDate()
。然后你可以使用 valueOf()
而不是 getTime()
.
moment#valueOf
simply outputs the number of milliseconds since the Unix Epoch, just likeDate#valueOf
.
您的代码可能如下所示:
const functionName = (timestamp, timezone) => {
return moment(timestamp)
.tz(timezone)
.startOf('day')
.valueOf();
};
let timestamp = 1493638245234;
let truncatedTimestamp = functionName(timestamp, 'America/Los_Angeles');
console.log(truncatedTimestamp);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.17/moment-timezone-with-data-2012-2022.min.js"></script>
我将我的函数 functionName 修改成这样并且它起作用了。
const functionName = (timestamp, timezone) =>
moment
.tz(timestamp, timezone)
.startOf('day')
.valueOf();
注意:一些用户发布了这个答案,但他们删除了他们的答案。