精华内容
下载资源
问答
  • IOS系统Date的坑 要创建一个指定时间的new Date对象时,通常的做法是: new Date("2020-09-21 11:11:00") 这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会...所以就想试着重写Date函数,一劳永逸,避免每次ne

    IOS系统Date的坑

    要创建一个指定时间的new Date对象时,通常的做法是:

    new Date("2020-09-21 11:11:00")
    

    这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是

    new Date("2020/09/21 11:11:00")
    

    通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。
    所以就想试着重写Date函数,一劳永逸,避免每次new Date都要考虑兼容性的问题。

    分析

    JS中要重写类,分为3步

    1. 重写构造函数
    2. 继承原类的原型链函数
    3. 继承原类的静态函数

    1、 重写Date构造函数

    重写构造函数,考虑到构造函数传参可能会传Number格式的时间戳,所以重写Date的构造函数,判断3个:

    • 是否包含第一个参数
    • 第一个参数类型是否为String
    • 第一个参数是否包含短横岗-

    代码如下

    const OldDate = Date
    // 修改第一个入参,横岗改斜杠
    Date = function () {
      if (arguments.length > 0 && typeof (arguments[0]) === 'string' && arguments[0].includes('-')) {
        const p = arguments[0].replace(/-/g, '/')
        arguments[0] = p
      }
      return new OldDate(...arguments)
    }
    

    2、 继承原型函数

    这个简单,指向原类的原型链即可,代码如下

    Date.prototype = OldDate.prototype
    

    3、 继承静态函数

    每个类在创建出来的时候都会有默认的静态函数,只需要继承原类有的而重写后Date没有的静态函数,代码如下:

    const oldDateStaticParam = Object.getOwnPropertyNames(OldDate)
    const dateStaticParam = Object.getOwnPropertyNames(Date)
    const diffParam = []
    for (let i = 0; i < oldDateStaticParam.length; i++) {
      let find = false
      for (let j = 0; j < dateStaticParam.length; j++) {
        if (oldDateStaticParam[i] === dateStaticParam[j]) {
          find = true
          break
        }
      }
      if (!find) {
        diffParam.push(oldDateStaticParam[i])
      }
    }
    for (let i = 0; i < diffParam.length; i++) {
      Date[diffParam[i]] = OldDate[diffParam[i]]
    }
    

    完整代码

    function wrapDate () {
      const OldDate = Date
      // 重写arguments[0]
      Date = function () {
        if (arguments.length > 0 && typeof (arguments[0]) === 'string' && arguments[0].includes('-')) {
          const p = arguments[0].replace(/-/g, '/')
          arguments[0] = p
        }
        return new OldDate(...arguments)
      }
      // 继承原型函数
      Date.prototype = OldDate.prototype
      // 继承静态函数,过滤已有的静态函数和参数,取数组差集
      const oldDateStaticParam = Object.getOwnPropertyNames(OldDate)
      const dateStaticParam = Object.getOwnPropertyNames(Date)
      const diffParam = []
      for (let i = 0; i < oldDateStaticParam.length; i++) {
        let find = false
        for (let j = 0; j < dateStaticParam.length; j++) {
          if (oldDateStaticParam[i] === dateStaticParam[j]) {
            find = true
            break
          }
        }
        if (!find) {
          diffParam.push(oldDateStaticParam[i])
        }
      }
      for (let i = 0; i < diffParam.length; i++) {
        Date[diffParam[i]] = OldDate[diffParam[i]]
      }
    }
    // IOS环境
    if (navigator.userAgent.includes('iPhone') || navigator.userAgent.includes('iPad')) {
      compatIos()
    }
    const date1 = new Date('1997-11-11 11:11:11')
    console.log(date1)
    const date2 = new Date('1997/11/11 11:11:11')
    console.log(date2)
    

    测试运行通过,在IOS端是正常的,Date的其他功能也能正常使用

    展开全文
  • //================================ 写成 weifor-date.js 文件保存,然后引用 ======================== /** * 该方法来自很多地方.......... * * 对Date的扩展,将 Date 转化为指定格式的String * 月(M)、日(d)...

    形成自己的js函数和文件

    //================================ 写成 weifor-date.js 文件保存,然后引用 ========================
    /**
     * 该方法来自很多地方..........
     *
     * 对Date的扩展,将 Date 转化为指定格式的String * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q)
     * 可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
     * eg:
     * (new Date()).toFormat("yyyy-MM-dd hh:mm:ss.S")    ==> 2006-07-02 08:09:04.423      
     * (new Date()).toFormat("yyyy-MM-dd E HH:mm:ss")    ==> 2009-03-10 二 20:09:04      
     * (new Date()).toFormat("yyyy-MM-dd EE hh:mm:ss")   ==> 2009-03-10 周二 08:09:04      
     * (new Date()).toFormat("yyyy-MM-dd EEE hh:mm:ss")  ==> 2009-03-10 星期二 08:09:04      
     * (new Date()).toFormat("yyyy-M-d h:m:s.S")         ==> 2006-7-2 8:9:4.18      
     */
    Date.prototype.format="yyyy-MM-dd hh:mm:ss";    // 来自中国人的习惯
    Date.prototype.toFormat=function(fmt) {         
        var o = {         
        "M+" : this.getMonth()+1, //月份         
        "d+" : this.getDate(), //日         
        "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时         
        "H+" : this.getHours(), //小时         
        "m+" : this.getMinutes(), //分         
        "s+" : this.getSeconds(), //秒         
        "q+" : Math.floor((this.getMonth()+3)/3), //季度         
        "S" : this.getMilliseconds() //毫秒         
        };
        if (fmt == undefined)
            fmt = Date.prototype.format;
        if(/(y+)/.test(fmt)){
            fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));         
        }
        if(/(E+)/.test(fmt)){
            fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "星期" : "周") : "") + "日一二三四五六".charAt(this.getDay()));         
        }         
        for(var k in o){
            if(new RegExp("("+ k +")").test(fmt)){         
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));         
            }         
        }
        return fmt;
    }
    
    /**
     * 重写toString并调用自定义格式化
     */
    Date.prototype.toString = function() {
        console.log("转载记得注明来源和出处,养成尊重别人劳动成果好习惯......");
        return this.toFormat();    // 默认,"yyyy-MM-dd hh:mm:ss",可通过修改 Date.prototype.format 属性实现自定义
    }

     

     页面应用

    //================================ 在自己的页面引用 weifor-date.js 文件 ========================
    
    // 测试默认格式
    //Date.prototype.format="yyyy-MM-dd E hh:mm:ss";    // 你是外星人就把它开出来
    console.log(new Date());
    console.log(new Date().toString());
    
    // 可以自己撸一下
    console.log(new Date().toFormat("yyyy-MM-dd EEE hh:mm:ss"));
    

    运行结果

     

     

     

    这么csdn。。。。。。。

     

    竟然等级不够3Level不给我添加自定义标签,是不是撸它一下。。。。。。。

     

    展开全文
  • 一个function对new Date()方法的重写,用于格式显示扩展 // 对Date的扩展,将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个...

    一个function对new Date()方法的重写,用于格式显示扩展

          // 对Date的扩展,将 Date 转化为指定格式的String
          // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符, 
          // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
            Date.prototype.format = function(fmt) { 
              var o = { 
                "M+" : this.getMonth()+1,                 //月份 
                "d+" : this.getDate(),                    //日 
                "h+" : this.getHours(),                   //小时 
                "m+" : this.getMinutes(),                 //分 
                "s+" : this.getSeconds(),                 //秒 
                "q+" : Math.floor((this.getMonth()+3)/3), //季度 
                "S"  : this.getMilliseconds()             //毫秒 
              }; 
              if(/(y+)/.test(fmt)) {
                fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
                }
              for(var k in o) {
                if(new RegExp("("+ k +")").test(fmt)){
                 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
                  }
                }
              return fmt; 
            }

    使用例子:

      (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") //输出结果: 2017-01-23 09:36:10.400
      (new Date()).Format("yyyy-M-d h:m:s.S")      //输出结果: 2017-1-23 9:36:35.572

    js获取时间戳:

        var timestamp1 = (new Date()).valueOf();   //输出结果:1485136737263
        var timestamp2 = (new Date()).getTime();  //输出结果:1485136744758
    展开全文
  • 前言: 使用百度编辑器,重写...this.editorId = String(new Date().getTime()) 修改编辑器的ueditor.config.js配置文件 (1)编辑器的默认层级过高,修改编辑器的默认层级 (2)插入图片时,需要为图片增加styl

    前言:

    1. 使用百度编辑器,重写上传功能,将编辑器的上传图片,上传音视频功能禁用,在工具栏中多加一个上传文件的功能(这是一个文件柜,支持上传图片/音频/视频/压缩文件/文本文档)

    2. 将ueditor封装成组件,编辑器的id要随机生成的,这里编辑器的id我拿的是时间戳
      this.editorId = String(new Date().getTime())

    3. 修改编辑器的ueditor.config.js配置文件
      (1)编辑器的默认层级过高,修改编辑器的默认层级
      在这里插入图片描述

      (2)插入图片时,需要为图片增加style样式![在这里插入图片描述](https://img-blog.csdnimg.cn/20201217095755504.png![在这里插入图片描述](https://img-blog.csdnimg.cn/202012171002446.png

    UEditor组件封装

    <template>
        <div>
            <div :style="{ overflow: 'hidden'}">
                <div :style="ueditorStyle">
                    <script :id="editorId" type="text/plain" :style="ueditorStyle"></script>
                </div>
            </div>
    
            <!-- 上传文件弹层 -->
            <FileGroupModal  v-if="showObj.visible"
                             @cancel="showObj.visible = false"
                             :sysType="sysType"
                             @changeImgUrl="(files) => { changeFileCabinets(files)}" />
        </div>
    </template>
    <script>
        import FileGroupModal from "@/components/FileGroupModal";
        let showObj ={
            visible: false
        }
        export default {
            name: 'UE',
            components: {
                FileGroupModal
            },
            data () {
                return {
                    editorId: '',
                    modalStatus: true,
                    editor: null,
                    showObj: showObj,
                    insertImgList: []
                }
            },
            props: {
                defaultValue: {
                    type: String
                },
                config: {
                    type: Object
                },
                ueditorStyle: {
                    type: Object,
                    default: ()=>{
                        return {
                            width: '600px',
                            minHeight: '600px'
                        }
                    }
                },
                sysType: { // 模块类型,mall(商城)、sitecms(网站)、common(公共)、develop(开发)【不传查询所有】
                    type: String,
                    default: 'common'
                },
            },
            watch: {
                'defaultValue': function (newVal, oldValue) {
                    if (this.editor) {
                        this.editor.setContent(this.defaultValue || ''); // 确保UE加载完成后,放入内容。
                    }
                }
            },
            created() {
                this.editorId = String(new Date().getTime())
            },
            mounted() {
                let mountedTimeout = setTimeout(()=>{
                    this.initUEditor()
                    clearTimeout(mountedTimeout)
                }, 100)
            },
            methods: {
                initUEditor: function() {
                    let _this = this;
                    window.UE.registerUI(
                        "test-dialog",
                        function(editor, uiName) {
                            // 参考http://ueditor.baidu.com/doc/#COMMAND.LIST
                            var btn = new window.UE.ui.Button({
                                name: "dialog-button",
                                title: "上传文件",
                                cssRules: `background-image: url('/images/upload-img-icon.png') !important; background-size: cover;`,
                                onclick: function() {
                                    // 渲染dialog
                                    showObj.visible = true;
                                    editor.execCommand(uiName);
                                }
                            });
    
                            return btn;
                        },
                        100 /* 指定添加到工具栏上的那个位置,默认时追加到最后 */,
                        '' /* 指定这个UI是哪个编辑器实例上的,默认是页面上所有的编辑器都会添加这个按钮 */
                    );
                    let toolbars = [
                        [
                            "source", // html
                            'undo', //撤销
                            'redo', //重做
                            'bold', //加粗
                            'italic', //斜体
                            'underline', //下划线
                            'strikethrough', //删除线
                            'subscript', //下标
                            'fontborder', //字符边框
                            'superscript', //上标
                            'formatmatch', //格式刷
                            'pasteplain', //纯文本粘贴模式
                            'selectall', //全选
                            'horizontal', //分隔线
                            'removeformat', //清除格式
                            'unlink', //取消链接
                            'insertrow', //前插入行
                            'insertcol', //前插入列
                            'mergeright', //右合并单元格
                            'mergedown', //下合并单元格
                            'deleterow', //删除行
                            'deletecol', //删除列
                            'splittorows', //拆分成行
                            'splittocols', //拆分成列
                            'splittocells', //完全拆分单元格
                            'deletecaption', //删除表格标题
                            'inserttitle', //插入标题
                            'mergecells', //合并多个单元格
                            'deletetable', //删除表格
                            'cleardoc', //清空文档
                            'insertparagraphbeforetable', //"表格前插入行"
                            'fontfamily', //字体
                            'fontsize', //字号
                            'paragraph', //段落格式
                            // 'simpleupload', //单图上传
                            // 'insertimage', //多图上传
                            'edittable', //表格属性
                            'edittd', //单元格属性
                            'link', //超链接
                            'emotion', //表情
                            // 'insertvideo', //视频
                            'justifyleft', //居左对齐
                            'justifyright', //居右对齐
                            'justifycenter', //居中对齐
                            'justifyjustify', //两端对齐
                            'forecolor', //字体颜色
                            'backcolor', //背景色
                            'insertorderedlist', //有序列表
                            'insertunorderedlist', //无序列表
                            'fullscreen', //全屏
                            'imagenone', //默认
                            'imageleft', //左浮动
                            'imageright', //右浮动
                            'imagecenter', //居中
                            'lineheight', //行间距
                            'customstyle', //自定义标题
                            'inserttable', //插入表格
                        ]
                    ]
                    this.editor = UE.getEditor(this.editorId, this.config ? this.config : {
                        toolbars: toolbars,
                        autoHeightEnabled: false
                    });
                    // 初始化UE
                    this.editor.addListener("ready", function () {
                        _this.editor.setContent(_this.defaultValue); // 确保UE加载完成后,放入内容。
                    });
                    // 监听全屏事件,修改全屏样式
                    this.editor.addListener('beforefullscreenchange',function(event,isFullScreen){
                       let screenchangeTimeout = setInterval(()=>{
                           let editorIdDom = document.getElementById(_this.editorId)
                           if (editorIdDom) {
                               let edui1 = editorIdDom.getElementsByClassName('edui-editor')
                               let edui1_iframeholder = editorIdDom.getElementsByClassName('edui-editor-iframeholder')
                               if (isFullScreen) {
                                   for (let i=0; edui1 && i< edui1.length; i++) {
                                       let itemEdui = edui1[i]
                                       itemEdui.style.width = (!_this.$store.state.menuFixed ? _this.$store.state.windowWidth - 40 : _this.$store.state.windowWidth - 220) + 'px'
                                       itemEdui.style.maxHeight = (_this.$store.state.windowHeight - 125) + 'px';
                                       itemEdui.style.overflow = 'auto';
                                       itemEdui.style.position = 'fixed';
                                       itemEdui.style.zIndex = '99';
                                       itemEdui.style.margin = !_this.$store.state.menuFixed ? '105px 0 0 20px' : '105px 0 0 200px'
                                   }
    
                                   for (let i=0; edui1_iframeholder && i< edui1_iframeholder.length; i++) {
                                       let itemIframe = edui1_iframeholder[i]
                                       itemIframe.style.maxHeight = (_this.$store.state.windowHeight - 200) + 'px';
                                   }
                               }
                               if (edui1) {
                                   clearInterval(screenchangeTimeout)
                               }
                           }
                       }, 50)
                    })
                },
                changeFileCabinets: function (files, item) {
                    this.insertImgList = files || []
                    this.insertImgList.filter(row=>{
                        this.insertFile(row)
                    })
    
                    this.showObj.visible = false
                },
    
                // 在光标位置插入图片
                insertFile(file) {
                    this.showObj.visible = false;
    
                    let htmlStr = ''
                    let fileUrl = this.$env.fileUrl + '/' +  file.fileKey
                    if (file.fileType && file.fileType.indexOf('image') >=0) {
                        htmlStr = '<img width="auto" style="max-width: 100%;" src="'+ fileUrl + '"/>'
                    } else if (file.fileType && file.fileType.indexOf('audio') >=0) {
                        htmlStr = '<audio controls width="94%" style="margin: 0 3%;max-width: 100%;" src="'+ fileUrl + '"/>'
                    } else if (file.fileType && file.fileType.indexOf('video') >=0) {
                        htmlStr = '<video controls width="94%" style="margin: 0 3%;max-width: 100%;" src="'+ fileUrl + '"/>'
                    } else {
                        htmlStr = '<a href="' + fileUrl + '">' + file.fileName + '</a>'
                    }
                    this.editor.execCommand("insertHtml", htmlStr);
                },
                getUEContent() { // 获取内容方法
                    this.$emit('onChange', this.editor.getContent());
                }
            },
            destroyed() {
                this.editor.destroy();
            }
        }
    </script>
    <style>
        /*增加自定义图片图标*/
        .edui-default .edui-for-dialog-button {
            background-image: url(../images/upload-img-icon.png) !important;
            background-size: cover !important;
            background-repeat: no-repeat !important;
        }
    </style>
    
    展开全文
  • 重写Calendar类

    2009-08-26 01:20:00
    学到了一些新的东西 记录下来写日历 首先想到会判断闰年事实上是可以不用的 只要知道这个月的天数就可以了这是在cloudgamer的boke中看到的new Date(this.Year, this.Month+1, 0).getDate(); 获
  • js将毫秒数转化为时间

    万次阅读 2018-07-10 14:17:05
    var date = new Date(1499996760000); // 格式化日期 dateTime = date.toLocaleString(); 这时候 dateTime 的值为"2018/07/10 下午2:07:02"。可以通过重写 toLocaleString() 方法,来自定义日期显示格式。 // ...
  • sun.js 新增内容:由Hollow Man修改,因此指定的时间始终在日出和日落时间之间。...var sunset = new Date ( ) . sunset ( 51.4541 , - 2.5920 ) ; //Sunrise at Stonehenge on midsummer's day 2
  • JS时间标准格式化

    2019-11-14 17:10:46
    因为很多时候都要用到这个方法,虽然简单但每次都重写太麻烦了,所以码一下 ... let date = new Date() let addZore = (num) => { if(num < 10) { return '0' + num.toString() } return num } ...
  • new Date(后台传来的毫秒值).toLocaleDateString() 就是这个样子 2.毫秒值转化为自定义的时间格式 本页面重写一下 toLocaleString()方法 Date.prototype.toLocaleString = function() { return...
  • js写一个定制日历

    千次阅读 2018-03-02 17:43:58
    老早之前写过一个js日历的方法,但是和dom耦合太强,并且逻辑复杂化,在原来的基础上进行了优化,重写了日历方法。效果图如下,dom结构为一个div,里面包含了 7*6=42 个元素,左浮动排列在线效果(手机端):...
  • JS日期格式化方法

    2018-09-21 08:57:00
    //++因format方法报错,重写日期格式转换方法var dataformat = function(time, format){ var t = new Date(time); var tf = function(i){return (i < 10 ? '0' : '') + i}; return format.replace(/yyyy|MM|dd|HH...
  • <p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <pre class="snippet-code-html lang-html prettyprint-override"><code><body> <font ...
  • The new server is likely more up to date. Old one was using outdated stuff. <p><strong>Goal</strong></p> <p><code>anything.mysite....
  • //原方法转换自带格式:xxxx-‎xx月-xx‎ ‎ ‎xx‎:‎xx‎:‎xx 一,重写方法前: 例:time:1534301216395 调用:changeTime(time): function changeTime(time){ ... var unixTimestamp = new Date...
  •  swfu = new SWFUpload({  upload_url : "http://www.swfupload.org/upload.php",  flash_url : "http://www.swfupload.org/swfupload_f9.swf", file_size_limit : "20480"  });  };  以下是一个标准的...
  • api design new proposal

    2020-12-09 02:38:34
    因为在数据库层面visa status是按照(visa_type, embassy_code, Optional[write_date])这个二(三)元组存储的,那么后期如果加region/sys或者其他的分类方式,这整个route都要重写。所以我...
  • 各类时间格式

    2017-05-19 17:23:13
    1 数据库中日期字段类型datetime,对应java取出来或存进去的类型Timestmp。。。如: zj1.setUseStartTime(rs.getTimestamp("useStartTime"));|||  ps.setTimestamp(8,new Timestamp(new ...2 js时间格式:重写jsDate
  • 高程3 引用类型

    2021-04-26 11:19:49
    5.引用类型 引用值(或者对象)是某个特定**引用类型**的实例,在js中 引用类型是吧数据和功能组织到一起的结构, ...Date 类型重写了 toLocaleString()、toString()和 valueOf()方法。 toLocaleString() - 2/1/2019
  • 毫秒时间转换模板 <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>... var date = new Date(1599996760000); // 按重写的自定义格式,格式化日期 //
  • js端可以直接处理通过new Date(长整型).toLocaleDateString(); 方法二: 可以自己写一个转换类。让他继承jsonserilaizer类,然后重写里面的方法。再到对应实体对象的get方法上通过@jsonSerilaizer注解 进行标注...
  • 旅游管理系统的FAQ

    2017-10-13 19:40:22
    1)JS端直接设置(new Date(长整形).toLocaleDateString()) 2)编写日期转换类继承JsonSerializer重写相关方法,然后在 对应实体对象的get方法上使用@JsonSerialize注解进行 标注要使用的类型转换器.
  • Frequently Asked Questions

    2018-05-18 13:48:40
    1)JS端直接设置(new Date(长整形).toLocaleDateString())2)编写日期转换类继承JsonSerializer重写相关方法,然后在 对应实体对象的get方法上使用@JsonSerialize注解进行 标注要使用的类型转换器.2.Tomcat 启动时...
  • 比如上面的例子用component语法重写的话: <pre><code> js // index.js import template from './date-picker.tpl.html'; import controller from './DatePickerCtrl'; const ddo = { ...
  • 鉴权流程主要是要重写shiro的入口过滤器BasicHttpAuthenticationFilter,在此基础上进行拦截、token验证授权等操作 2.2. 关于AccessToken及RefreshToken概念说明  1. AccessToken:用于接口传输过程中的用户授权...
  • new Date 来当时间戳。 <p>so,如果 a 和 b 均是 Date 类型或者 Boolean 类型,我们可以用 <code>+a === +b</code> 来判断是否 equal。 程序接着走,我们接着看,似乎...
  • new Date(2015,1,10); date1 < date2 </code></pre> 常用的方法 - getTime 获取时间对象的毫秒数 - setTime 设置时间对象的毫秒数,会改变日期 - getFullYear 获取时间对象的年(2015) - ...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

datenew重写js