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 相关文章推荐
javascript实现颜色渐变的方法
Oct 30 Javascript
js hover 定时器(实例代码)
Nov 12 Javascript
ExtJs动态生成treepanel的Json格式
Jul 19 Javascript
理解javascript封装
Feb 23 Javascript
原生JS实现-星级评分系统的简单实例
Aug 21 Javascript
JS html时钟制作代码分享
Mar 03 Javascript
AngularJS的ng-click传参的方法
Jun 19 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
用Webpack构建Vue项目的实践
Nov 07 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
Jun 26 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
Nov 14 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 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
通过5个php实例细致说明传值与传引用的区别
2012/08/08 PHP
php数组随机排序实现方法
2015/06/13 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
Zend Framework教程之Autoloading用法详解
2016/03/08 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
Vue的Options用法说明
2020/08/14 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
使用Flask集成bootstrap的方法
2018/07/24 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
劳资人员岗位职责
2013/12/19 职场文书
要账委托书范本
2014/09/15 职场文书
《角的度量》教学反思
2016/02/18 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL
Python中三种花式打印的示例详解
2022/03/19 Python