bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法


Posted in Javascript onMarch 08, 2017

日期插件 bootstrap-datetimepicker 在火狐下出现一条报错信息:TypeError: (intermediate value).toString(…).split(…)[1] is undefined

这条错误必然出现,难道没有在 Firefox 下进行测试。

在 Firefox 下查看项目 demo (http://www.malot.fr/bootstrap-datetimepicker/demo.php)可以正常运行,但这个 demo.php 使用的是 2013-3-2 的 datetimepicker,github 项目(https://github.com/smalot/bootstrap-datetimepicker/releases)已经发布到 2017-3-3,这个最新的版本(以及最近的一些版本)在 Firefox 下测试不完善,计算 defaultTimeZone 时虽然没有出错,但给出的结果也不正确。

源代码如下,运行环境 Firefox 51.0.1(32位)

this.defaultTimeZone = (new Date).toString().split('(')[1].slice(0, -1);
this.timezone = options.timezone || this.defaultTimeZone;
// 2.4.4 改进版本
this.timezone = options.timezone || timeZoneAbbreviation();
function timeZoneAbbreviation() {
  var abbreviation, date, formattedStr, i, len, matchedStrings, ref, str;
  date = (new Date()).toString();
  formattedStr = ((ref = date.split('(')[1]) != null ? ref.slice(0, -1) : 0) || date.split(' ');
  if (formattedStr instanceof Array) {
    matchedStrings = [];
    for (var i = 0, len = formattedStr.length; i < len; i++) {
      str = formattedStr[i];
      if ((abbreviation = (ref = str.match(/\b[A-Z]+\b/)) !== null) ? ref[0] : 0) {
        matchedStrings.push(abbreviation);
      }
    }
    formattedStr = matchedStrings.pop();
  }
  return formattedStr;
}

出错原因是 Firefox 下 Date.prototype.toString 返回结果不包含 TimeZone 的文字描述。

2.4.4 改进版本使用的 timeZoneAbbreviation 函数在 Firefox 下返回  true

对 timeZoneAbbreviation 使用的三元表达式依次简化

((abbreviation = (ref = str.match(/\b[A-Z]+\b/)) !== null) ? ref[0] : 0)
(abbreviation = (ref = str.match(/\b[A-Z]+\b/)) !== null)
(abbreviation = (xxx) !== null)
(abbreviation = xxx !== null)
abbreviation 必然是布尔值,如果将 matchedStrings.push(abbreviation) 换成 matchedStrings.push(str) 更接近预期值。

推荐使用文末的方案。

bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法

解决方案

将 date toString 最后一个空格之后的字符串作为 TimeZone。

// this.defaultTimeZone = (new Date).toString().split('(')[1].slice(0, -1);
this.defaultTimeZone = (new Date + '').split(' ').slice(-1)[0].replace(/\(|\)/g, '');
this.timezone = options.timezone || this.defaultTimeZone;

以上所述是小编给大家介绍的 bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
ie和firefox中img对象区别的困惑
Dec 27 Javascript
js跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
页面右下角弹出提示框示例代码js版
Aug 02 Javascript
ExtJS4 表格的嵌套 rowExpander应用
May 02 Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 Javascript
AngularJS使用ng-options指令实现下拉框
Aug 23 Javascript
Angularjs 制作购物车功能实例代码
Sep 14 Javascript
100行代码理解和分析vue2.0响应式架构
Mar 09 Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 Javascript
深入浅析Vue.js计算属性和侦听器
May 05 Javascript
Ajax请求时无法重定向的问题解决代码详解
Jun 21 Javascript
Element Dialog对话框的使用示例
Jul 26 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 #Javascript
教你用十行node.js代码读取docx的文本
Mar 08 #Javascript
jQuery插件zTree实现获取一级节点数据的方法
Mar 08 #Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
Mar 08 #Javascript
原生js实现放大镜特效
Mar 08 #Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
Mar 08 #Javascript
正则 js分转元带千分符号详解
Mar 08 #Javascript
You might like
php学习之 循环结构实现代码
2011/06/09 PHP
php使用curl访问https示例分享
2014/01/17 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
解决layer 关闭当前弹窗 关闭遮罩层 input值获取不到的问题
2019/09/25 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
django静态文件加载的方法
2018/05/20 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
保险公司早会主持词
2014/03/22 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
初中班主任教育随笔
2015/08/15 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
Python制作表白爱心合集
2022/01/22 Python