在日期字段中设置日期将其设置为前一天[重复]

Posted

技术标签:

【中文标题】在日期字段中设置日期将其设置为前一天[重复]【英文标题】:Setting the date in date field sets it with one day before [duplicate] 【发布时间】:2016-01-03 11:48:45 【问题描述】:

我正在使用日期输入类型从 html 表单中显示/获取日期:

<input type="date">

通过 javascript 设置日期:

myInput.valueAsDate = new Date();

这很好用。但是如果我想设置另一个日期对象,例如:

myInput.valueAsDate = new Date(1995, 0, 1);

它显示12/31/1994——正好是 1995 年除夕前一天。如果我添加24 作为小时参数,日期显示正确,但日期对象本身显然是2nd of January, 1995,这不是一个好的解决方案解决这个问题。

console.log(myInput.valueAsDate = new Date(1995, 0, 1));
console.log(myInput.valueAsDate);
&lt;input type="date" id="myInput"&gt;

我在控制台中得到了这个:

Sun Jan 01 1995 00:00:00 GMT+0200 (EET)
Sat Dec 31 1994 02:00:00 GMT+0200 (EET)

这是浏览器问题吗?是否有任何变通方法/解决方案?

最后,我确实想使用任何插件来显示/获取日期,但我想使用原生日期input 元素(至少,问题是关于它@987654332 @)。

我在 Chromium 和 Chrome 中复制了这个。 Firefox 似乎不支持日期类型输入

【问题讨论】:

它似乎在 Chrome 上为我工作。我看到 01/01/1995 @DrewDahlman 嗯,什么版本? 版本 45.0.2454.101 哦,好点。托比发布了一个有趣的答案。 关于时区的事情真的很有趣。很高兴知道! 【参考方案1】:

这是this的时区差异。

显然,当使用 new Date() 时,您使用的是当前时区,而 valueAsDate 采用的是 GMT dateTime

把你的代码改成这样的

console.log(myInput.valueAsDate = new Date(1995, 0, 1,12));

应该有效

更新 1

console.log(myInput.valueAsDate = new Date(Date.UTC(1995, 0, 1));

应该适用于所有时区。

【讨论】:

哦,好点子!对于后代,您能否发布参考如何在 GMT 日期时间中转换日期? 另外,有没有办法以某种方式忽略时区?我只想显示日期对象中的日期。 new Date(1995, 0, 1,12) 会在全球所有时区工作吗? @IonicăBizău 我认为您不能忽略时区。但是,如果您只使用 new Date() 创建它,您的用户将获得他们的当前日期,这没问题。如果您从服务器获取它并且您的站点是全球性的,那么您应该关心时区。所以它按预期工作,也许你不应该寻找解决方法。 我猜Date.UTC 是一个不错的解决方案。谢谢。 :)

以上是关于在日期字段中设置日期将其设置为前一天[重复]的主要内容,如果未能解决你的问题,请参考以下文章

数据库的表“工作日期”字段默认值为系统当前日期的后一天 该怎么填

Swift - 将字符串转换为在正确日期前一天返回的日期[重复]

在 Grails 域类中设置日期字段的默认值

在 Extjs 中设置日期的最小值

如何在 extjs 或 sencha 的日期时间字段中设置时间

如何使用 Formik 在 react-datepicker 中设置初始日期?