js 获取时间戳问题?

js怎么获取当前当天的时间戳?

例如: 现在是 2023/9/25 16:36:30
需要根据当天的时间获取 2023/9/25 00:00:00 的时间戳数字(时分秒需要全部归零)

阅读 1.1k
5 个回答
let now = new Date();
// 把时、分、秒和毫秒都设置成 0
now.setHours(0, 0, 0, 0);
// 获取时间戳
let timestamp = now.getTime();
console.log(timestamp);

可以使用 setHours 方法设置 Date 时间为 00:00:00,然后在获取相应的时间戳。

const timestamp = new Date(new Date().setHours(0,0,0,0)).getTime()

经评论区提醒,可以简化为:

const timestamp = new Date().setHours(0,0,0,0)

希望这个回答对你有所帮助!

基本方法如上,关键就是 setHours()。但问题是,如果你想得到一个时间戳,用这种方法算出来的时间戳并不是 UTC 时间,比如我们在 +8 区,那算出来会是标准时间的 8 小时前。

看这个例子(浏览器 +8 区,即中国时区):

new Date("2023-9-25").getTime()
// 1695571200000

new Date("2023-9-25 Z").getTime()
// 1695600000000

这两个数据相减得到 28800000,除以 3600(秒/时) 再除以 1000(毫秒/秒),可以得到 8,即 8 小时的时差。

所以,如果你想得到按当地时间计算的,以天为单位的时间戳,用

// 今天是 2023-09-25
new Date().setHours(0, 0, 0, 0)
// 1695571200000

但如果想得到按 UTC 时间计算的以天为单位的时间戳,用

// 今天是 2023-09-25
(ms => ms - ms % (24 * 3600 * 1000))(Date.now())
// 1695600000000

补充一句:一般情况下,如果只有国内用户,仅在 +8 区,不考虑时区的话,其实用哪个时间无所谓,标准都是一致的。但是只要存在其他时区的用户就可能会出问题,毕竟浏览器都是按当地时间算,这种情况下只有用 UTC 时间才能统一标准。

参阅:javascript - 考虑时区了吗?

function getTimeNum() {
   let day = "2023/9/25 16:36:30"
   let [date,time] = day.split(" ");
   time = "00:00:00"
   return  new Date(date + " " +time).getTime()
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏