Javascript Date()给出错误的日期一个小时
Javascript Date() give wrong date off by one hour
我从java (Spring-MVC
)控制器发送此日期,mysql
中的类型是datetime
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "..") public Date getYy() {
return this.yy;
}
as: [2015-09-30 00:00:00.0]
当我得到这个日期与ajax作为1443567600000
:
new Date(1443567600000)
转换为Tue Sep 29 2015 23:00:00 GMT+0000 (Maroc)
那为什么我把日期搞错了一个小时呢?
<解决方案/strong>
我们用
解析d = new Date(value) ;
d.setTime( d.getTime() + d.getTimezoneOffset()*60*1000 );
因为它是夏令时(DST)或夏令时的问题。篇好文章
我想也许这是一个夏令时的问题。您可以检查客户端的时区和服务器的时区。(web server或SQL server)
这个JS对Date的处理是一个相当大的翻转。
我在英国…"easy"因为我们用的是格林尼治标准时间(UTC)…除了在实行夏令时(英国夏令时)的夏季。时钟在夏天向前走一小时,在冬天向后走一小时(顺便说一句,这是另一个问题!)。3月的某一天,格林尼治时间下午4点现在被称为 5pm (BST)。
夏天:
如果你做new Date( '2017-08-08' )
,这将给你(toString
)"日期2017 - 08年- 08 - t00:00:00.000z"。
new Date( '2017-08-08 00:00' )
,则会得到"日期2017-08-07T23:00:00.000Z"!在第二种情况下,JS似乎试图成为"有帮助的";假设因为你规定了时间你指定的是英国夏令时。所以它调整为GMT/UTC。否则它不会…尽管(当然)它仍然会产生一个精确到毫秒的Date
对象。真是抓到你了!
确认:a winter month…当不采用BST时:new Date( '2018-01-01 00:00' )
/new Date( '2018-01-01' )
:都给出'Date 2018-01-01T00:00:00.000Z'
至于调整,似乎要撤销自动调整只需输入
jsDate.setTime( jsDate.getTime() + jsDate.getTimezoneOffset() * 60 * 1000 );
…这有点像优素福写的……除非你必须从特定的Date
中获得偏移量…我的实验似乎证明了这是加法,而不是减法。
如果JS Date
的默认字符串表示给出UTC时间后跟TZ(时区)偏移信息,就像一些ISO日期格式一样,这将会更有帮助:显然,包含了此信息。
我们可能需要更多关于它的数据,但也可能这里没有什么问题,这取决于你如何设置和返回你的日期。
基本上1443567600000
不包含时区。它代表格林威治的Tue Sep 29 2015 23:00:00
。这是一个时刻,当然,它不同于任何有不同时区的地方。同一时刻,发生在不同的时间(GMT+1的午夜是GMT的晚上11点)。
你必须在DB中存储时间和时区,并可能发送回JS,否则它将总是根据客户端的本地时间进行不同的解释。
举例:
var d = new Date(2015, 8, 30);
console.log(d.toJSON()); // In my case I got "2015-09-29T22:00:00.000Z"
console.log(d.toDateString()); // "Wed Sep 30 2015"
更具体地说
time = new Date("2018-06-01 " + time);
var offset = time.getTimezoneOffset();
offset = Math.abs(offset / 60);
time.setHours(time.getHours() + offset);
在这种情况下,等于带前导零的小时和带前导零的分钟。这将把小时差添加到UTC。如果你传递一个字符串给date,它将被视为UTC。
- 引导程序日期时间选择器来自另一个日期时间选择器
- 为什么在JavaScript中可以从另一个日期对象中减去日期对象
- 从上一个日期创建日期并添加到该日期
- 从另一个日期选择器中选择另一个值后,获取日期选择器的起始值
- Onsen UI在点击时显示一个日期选择器
- 有可能做一个日期&使用jquery ui的时间日历
- jquery日期选择器-选择时激活另一个日期选择器
- 使用jquery以dd-mmm-yyyy格式获取给定日期后的第一个日期和最后一个日期
- 给一个日期加两个小时
- 计算特定日期's将日期更改为另一个日期,并打印它们的差异
- 我的输入字段听到除回车之外的每个“键下”事件.我有一个日期选择器,不确定发生了什么
- 计算当天和另一个日期之间的差额时出现错误差异
- jQuery UI 日期选择器:向另一个日期选择器添加 6 个月
- 如何在没有周末的情况下添加天数以从当前日期获取下一个日期
- 每当我在 jquery UI 日期选择器中更改月份/年份时,如何获取该月的第一个日期和最后一个日期
- 给定一个日期/时间字符串,w javascript/jquery,你怎么能确定它是否是今天
- 将当前日期与 JavaScript 上的另一个日期时间进行比较
- 如何在引导日期设置每月的第一个日期和最后一个日期
- 如何使用另一个日期输入字段将日期设置为输入字段
- Ajax 日历扩展器不选择上一个日期