HTML5 datetime-local(Chrome):如何在当前时区输入日期时间(HTML5 datetime-local (Chrome): How to input datetime in current time zone)
我住在GMT + 9,我想输入我当前时区中指定的日期和时间。 Chrome版本40.0.2214.93(64位)
但是,如果我在日期时间选择器中输入12:00 AM,
元素返回的实际值是2015-01-30T00:00 (在Chrome控制台中打印出来),这相当于我所在时区的上午9:00。 我必须手动将9小时添加到结果中吗? 由于Chrome不支持将datetime作为输入类型,因此我无法使用datetime作为替换。
I live in GMT+9, I want to input date and time that specified in my current time zone. Chrome Version 40.0.2214.93 (64-bit)
However, if I input 12:00AM in the datetime picker,
the actual value that the element returns is 2015-01-30T00:00 (by printing out in the Chrome console), which equals 9:00AM in my time zone. Do I have to manually add 9 hours to the result? Since Chrome doesn't support datetime as an input type, I cannot use datetime as a replacement.
原文:https://stackoverflow.com/questions/28234572
更新时间:2019-09-02 16:10
最满意答案
“2015-01-30T00:00”正是您输入的内容,因此这是给出的结果。
你说“......等于我所在时区的上午9点”。 只有结果是UTC时才会这样 - 事实并非如此。 根据ISO8601标准,如果值以尾随Z结尾,则仅假定为UTC,例如“2015-01-30T00:00Z”。
也许您正在将值提供给Date构造函数?
new Date("2015-01-30T00:00")
在这种情况下,该值将被解释为UTC - 但这是由于Date对象的怪癖。 您可以通过一些替换来解决这个问题:
new Date("2015-01-30T00:00".replace('T',' ').replace('-','/'))
或者,如果您更喜欢更清晰的代码,请考虑使用没有那个怪癖的moment.js :
moment("2015-01-30T00:00").toDate(); // or .format(), or other functions...
"2015-01-30T00:00" is exactly what you entered, so that is the result that is given back.
You said "... which equals 9:00AM in my time zone". That would only be true if the result was in UTC - which it is not. By the ISO8601 standard, it would only be presumed to be in UTC if the value ended with a trailing Z, such as "2015-01-30T00:00Z".
Perhaps you are feeding the value into the Date constructor?
new Date("2015-01-30T00:00")
In that case, the value will be interpreted as UTC - but that's due to a quirk of the Date object. You can work around this with a bit of substitution:
new Date("2015-01-30T00:00".replace('T',' ').replace('-','/'))
Or, if you prefer cleaner code, consider using moment.js, which doesn't have that quirk:
moment("2015-01-30T00:00").toDate(); // or .format(), or other functions...
相关问答
我现在通过使用JSX“defaultValue”属性而不是“value”设置值来解决此问题。 这导致字段没有被状态变量锁定,这又使得我可以创建一个onChange函数,它总是更新状态,但对字段本身没有任何影响。 通过这样做,该领域的行为如预期,我可以提交目前在我的状态下的任何值。 这样解决问题的缺点是我无法验证日期。 这意味着如果有人试图提交一个无效的日期,它只会在数据库中存储为空。 如果有人想出更优雅的解决方案,我很乐意听到它。 I've solved this for now by setti
...
我建议使用input.valueAsDate或input.valueAsNumber来代替input.value。 I recommend to use input.valueAsDate or input.valueAsNumber instead of input.value.
检查此代码小提琴给出初始值。 记得同时给出日期和时间价值!
A demonstration of how to access a Local Datetime field
Click the button to get the local date and time of the datetime field.
...
我唯一可以想到的原因是浏览器厂商对于被批准的标准信号失去信心,因此从他们的代码中删除了实现。 为了支持这个想法:W3C刚从工作草案中删除了datetime和datetime-local 。 浏览器供应商最终会放弃对这两者的支持。 根据html5test,大多数当前的浏览器都删除了对这两种输入类型的支持。 最新发展: datetime-local返回草稿; 较新的规范页面不显示datetime ,但它显示datetime-local 。 它听起来像是在地图上,并再次被支持! 还要注意这个相关的帖子在
...
HTML5 datetime-local输入类型会返回一个字符串值,其中包含ISO8601格式的日期和时间,精度很高,并且没有任何时区偏移量。 例如: 2014-07-12T01:00 当谈到从字符串解析日期时, JavaScript日期对象是众所周知的不一致的。 在大多数实现中,当你提供这样的字符串时,它错误地认为该值是UTC。 因此,您返回的Date对象将根据本地计算机的时区偏移进行调整。 有两种方法可以解决这个问题: 选项1 将字符串操作为可能被Date对象的解析器解释为本地时间的格式。 具
...
这是可能的。 通过使用JQuery函数,您可以拥有一个非常完整的解决方案。 这是一个例子。 JSFiddle http://jsfiddle.net/v8MNx/1/ HTML
Date:
...
“2015-01-30T00:00”正是您输入的内容,因此这是给出的结果。 你说“......等于我所在时区的上午9点”。 只有结果是UTC时才会这样 - 事实并非如此。 根据ISO8601标准,如果值以尾随Z结尾,则仅假定为UTC,例如“2015-01-30T00:00Z”。 也许您正在将值提供给Date构造函数? new Date("2015-01-30T00:00")
在这种情况下,该值将被解释为UTC - 但这是由于Date对象的怪癖。 您可以通过一些替换来解决这个问题: new Dat
...
大多数浏览器尚不支持所有日期类型输入,因此您遇到此问题。 为了使用它们,一种解决方案是利用提供浏览器不支持的功能的polyfill。 http://html5please.com/#date 一个例子是来自webshims库的表单polyfill。 $.webshims.polyfill('forms forms-ext');
然后可以使用上面的示例选择年份。 Webshim链接: http ://afarkas.github.io/webshim/demos/ 配置器https://afark
...
这是一个plnkr演示 要显示当前的本地日期时间,您只需创建一个类似ISO的字符串,如下所示: this.datetime = this.datetime.getFullYear() + '-' +
("0" + (this.datetime.getMonth() + 1)).slice(-2)
+ '-' + ("0" + this.datetime.getDate()).slice(-2)
+ 'T' + this.datetime.getHours() + ':' + this.dat
...
当使用输入类型 datetime-local 。 日期格式必须为: 'YYYY-MM-DDTHH:mm:ss' 例如: "2014-11-16T15:25:33" $(
function(){
$('#time').click(function(){
var time = moment().format('YYYY-MM-DDTHH:mm:ss');
$('#tim
...