尴尬了,我连根据秒数来计算天数差值都搞不定,求解!

2017-06-22 02:52:13 +08:00
 wl879

是我笨蛋了吗, 计算天数是不是用 “时间戳 / (60 秒 * 60 分 * 24 小时)” (单位是秒)

先请问是我这公式不对吗,如果对,可我计算出来会有问题,如:

2017.6.1 07:00 与 2017.6.1 09:00 所得结果会多出 1 天,什么原因

why,why,why

3734 次点击
所在节点    问与答
28 条回复
Perry
2017-06-22 02:56:14 +08:00
为啥不把数据列出来
SharkIng
2017-06-22 03:17:54 +08:00
确定时间戳是以秒计数的么?
cxbig
2017-06-22 03:34:21 +08:00
系统环境和配置未知,用什么语言未知,用什么日期库或运算方法未知。
不知道怎么帮你。
lzdhlsc
2017-06-22 03:36:03 +08:00
2017.6.1 07:00 CST = 2017.5.31 23:00 UTC
2017.6.1 09:00 CST = 2017.6.1 01:00 UTC
时间戳一般是以 1970.01.01 00:00 UTC 为基准的,记录的是从基准时间过了多少秒(毫秒).
TtiGeR
2017-06-22 07:46:41 +08:00
没考虑时区吧
xyjtou
2017-06-22 07:56:08 +08:00
一般语言时间计算都有标准库吧,不用手工造轮
wl879
2017-06-22 08:00:18 +08:00
其实用什么语言无关,我原本用 swift (是秒为单位),为方便我用 javascript 列一下

var time1 = new Date("2017-6-1 7:00:00");
var time2 = new Date("2017-6-1 9:00:00");

console.log(time1, time1.getTime() / (60*60*24*1000))

// 输出:Thu Jun 01 2017 07:00:00 GMT+0800 (CST) 17317.958333333332

console.log(time2, time2.getTime() / (60*60*24*1000))

// 输出:Thu Jun 01 2017 09:00:00 GMT+0800 (CST) 17318.041666666668

在补充一点,其实分割点是 8:00, 大于等于 8:00 就多了一天
wl879
2017-06-22 08:07:37 +08:00
@lzdhlsc @TtiGeR 请问,时间戳是 1970.01.01 00:00 UTC 过了多少秒,然后用秒数去计算过了多少天,而不是计算具体的日期,应该与时区无关吧,请揪正一下错误,网上看了很多博客文章是教如何计算的,可测过以后,都是错的,多耽误人啊
Pitttttt
2017-06-22 08:14:36 +08:00
@wl879 GMT+800 都告诉你了时区啦,基准为 12 点我们这就是 8 点,当然在你看来就是已 8 点为分界线的啊
gstqc
2017-06-22 08:15:04 +08:00
timestamp 是无时区的
你在转换时没有把时区考虑进去
7 点和 9 点,如果你的时区是东八区,换成 GMT 在日期上刚好相差 1 天
wl879
2017-06-22 08:29:20 +08:00
@Pitttttt @gstqc 没太懂,如果 timestamp 是无时区的, 我需求计算的是 过了多少天数, 而不是几月几号,与时区还有关吗,求一下具体的计算方法
Rice
2017-06-22 08:36:54 +08:00
计算结果不是 2 小时吗??
Rice
2017-06-22 08:37:21 +08:00
@Rice #12 哦哦,我看错了
gstqc
2017-06-22 08:40:39 +08:00
@wl879 因为你用你本地的时间就带时区了。
比如中国的 22 号早上 7 点,在 GMT 的时区那还是 21 号 23 点,日期就相差 1 了啊
XYxe
2017-06-22 08:41:29 +08:00
你用 (time2.getTime() - time1.getTime()) / (60*60*24*1000) 得到的就是你想要的结果了。
先转成天数就用的是 UTC 时间的天数了。
Pitttttt
2017-06-22 08:41:44 +08:00
@wl879 算出来的没时区,但是你现在是+8 就是东 8 区,他会再算到你现在在的时区,就是要+8
gstqc
2017-06-22 08:43:41 +08:00
再说楼主的需求
只是算个天数,直接 日期减去 1970-01-01 就行了啊
在时区和无时区之间换算多麻烦
Rice
2017-06-22 08:43:42 +08:00
难道不是换算成 GMT 刚好是 23 点和 1 点,正好过一天?
Rice
2017-06-22 08:44:23 +08:00
Rice
2017-06-22 08:53:10 +08:00

这样就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370190

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX