pix*_*dev 84 javascript firefox datetime google-chrome date
我正在创建一个如下所示的日期时间字符串: 2010-07-15 11:54:21
使用以下代码我在Firefox中获得无效日期,但在Chrome中运行良好
var todayDateTime = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + seconds;
var date1 = new Date(todayDateTime);
Run Code Online (Sandbox Code Playgroud)
在firefox中,date1给了我一个无效的日期,但在chrome中它的工作正常,主要原因是什么?
Chr*_*nte 77
您无法以任何方式实例化日期对象.它必须以特定的方式.以下是一些有效的例子:
new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)
Run Code Online (Sandbox Code Playgroud)
要么
d1 = new Date("October 13, 1975 11:13:00")
d2 = new Date(79,5,24)
d3 = new Date(79,5,24,11,33,0)
Run Code Online (Sandbox Code Playgroud)
Chrome必须更加灵活.
资料来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
来自apsillers评论:
EMCAScript规范只需要一种日期格式(即YYYY-MM-DDTHH:mm:ss.sssZ),但实现可以自由支持自定义日期格式:" 如果字符串不符合[ECMAScript定义的]格式该功能可以回溯到任何特定于实现的启发式或特定于实现的日期格式. "Chrome和FF只是具有不同的"特定于实现的日期格式".
Tah*_*man 21
这适用于所有浏览器 -
新日期('2001/01/31 12:00:00 AM')
new Date('2001-01-31 12:00:00')
Run Code Online (Sandbox Code Playgroud)
格式:YYYY-MM-DDTHH:mm:ss.sss
详情:http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
Alv*_*vis 12
这也适用于大多数浏览器
new Date('2001/01/31 12:00:00')
Run Code Online (Sandbox Code Playgroud)
这是格式
"yyyy/MM/dd HH:mm:ss"
Run Code Online (Sandbox Code Playgroud)
Joh*_*ers 11
假设您的时间段具有如下格式:
'2016-03-10 16:00:00.0'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你可以做一个简单的正则表达式将其转换为ISO 8601:
'2016-03-10 16:00:00.0'.replace(/ /g,'T')
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出:
'2016-03-10T16:00:00.0'
Run Code Online (Sandbox Code Playgroud)
这是标准的日期时间格式,因此所有浏览器都支持:
document.body.innerHTML = new Date('2016-03-10T16:00:00.0') // THIS IS SAFE TO USERun Code Online (Sandbox Code Playgroud)
假设您的时间段具有如下格式:
'02-24-2015 09:22:21 PM'
Run Code Online (Sandbox Code Playgroud)
在这里,您可以执行以下正则表达式:
'02-24-2015 09:22:21 PM'.replace(/-/g,'/');
Run Code Online (Sandbox Code Playgroud)
这也产生了所有浏览器支持的格式:
document.body.innerHTML = new Date('02/24/2015 09:22:21 PM') // THIS IS SAFE TO USERun Code Online (Sandbox Code Playgroud)
假设您有一个时间字符串,不容易调整到一个良好支持的标准.
在这种情况下,最好将时间字符串拆分为不同的部分,并将它们用作以下各项参数Date:
document.body.innerHTML = new Date(2016, 2, 26, 3, 24, 0); // THIS IS SAFE TO USERun Code Online (Sandbox Code Playgroud)
如果您仍想使用短划线创建日期,则可以使用以下格式:
var date = new Date('2013-08-31T17:00:00Z')
Run Code Online (Sandbox Code Playgroud)
但请记住,它会根据UTC创造时间.这意味着,如果您居住在GMT + 3(比GMT提前3小时)时区,它会将此时区偏移量添加到时间.所以上面的例子将有这个值,如果GMT + 3(注意它是小时20:00而不是17:00):
Sat Aug 31 2013 20:00:00 GMT+0300 (FLE Standard Time)
Run Code Online (Sandbox Code Playgroud)
请务必在末尾添加"Z"字母,否则Chrome和Firefox会以不同方式解析字符串(一个会添加时间偏移,另一个则不会).
在使用AngularJS时,我在Firefox和Safari中遇到了类似的问题.例如,如果从Angular返回的日期如下所示:
2014-06-02 10:28:00
Run Code Online (Sandbox Code Playgroud)
使用此代码:
new Date('2014-06-02 10:28:00').toISOString();
Run Code Online (Sandbox Code Playgroud)
在Firefox和Safari中返回无效的日期错误.但是在Chrome中它运行正常.正如另一个答案所述,Chrome很可能在解析日期字符串时更灵活.
我最终的目标是以某种方式格式化日期.我找到了一个很好的库来处理跨浏览器兼容性问题和日期格式问题.该库名为moment.js.
使用此库,以下代码可在我测试的所有浏览器中正常运行:
moment('2014-06-02 10:28:00').format('MMM d YY')
Run Code Online (Sandbox Code Playgroud)
如果您愿意将这个额外的库包含到您的应用程序中,您可以更轻松地构建日期字符串,同时避免可能的浏览器兼容性问题.作为奖励,如果需要,您可以轻松地格式化,添加,减去等日期.
| 归档时间: |
|
| 查看次数: |
102847 次 |
| 最近记录: |