【问题标题】:Prototype date format validate error on OSX safari / firefoxOSX safari / firefox 上的原型日期格式验证错误
【发布时间】:2014-11-05 07:05:26
【问题描述】:

我在 OSX 10.9.4 (Mavericks) Safari 和 Firefox 上也遇到以下问题:

我使用bootstrap datepicker 输入日期

<label class="col-sm-3 gray required" for="received_date"><?php echo $dataHelper->__('Received Date') ?> <em>*</em></label>

<div class="col-sm-9 controls input-group date" data-date-format="<?php echo Aion_Ftc_Helper_Data::BOOTSTRAP_DATE_FORMAT ?>"  id="dp_received_date">
    <input type="text" class="required-entry custom-date validate-date" id="received_date" name="received_date">
    <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
</div>

这是一个带有原型和prototype validation 的magento 网站。有效日期格式为“mm-dd-yyyy”,在 windows chrome、firefox 上验证成功,但在 osx safari 和 firefox 上出现错误(osx chrome 也不错)

验证.js

['validate-date', 'Please enter a valid date (MM-DD-YYYY format).', function(v) {
    if(Validation.get('IsEmpty').test(v)) return true;
    var regex = /^(\d{2})-(\d{2})-(\d{4})$/;

    if(Prototype.Browser.WebKit){
        var d = new Date(v.replace(regex, '$1-$2-$3'));
    } else {
        var d = new Date(v.replace(regex, '$3-$1-$2'));
    }
    //console.log(d);
    return (parseInt(RegExp.$2, 10) == d.getDate()) &&
        (parseInt(RegExp.$1, 10) == (1+d.getMonth()) ) &&
        (parseInt(RegExp.$3, 10) == d.getFullYear());
}],

有什么问题?有小费吗?我也使用 jquery noconflict

谢谢!

【问题讨论】:

    标签: javascript jquery macos magento prototypejs


    【解决方案1】:

    简单地使用这个:

    ['validate-date', 'Please enter a valid date (MM-DD-YYYY format).', function(v) {
        return Validation.get('IsEmpty').test(v) || /^(\d{1,2})-(\d{1,2})-(\d{4})$/.test(v);
    
    }],
    

    【讨论】:

      【解决方案2】:

      我今天遇到了同样的问题,不要使用破折号作为分隔符。这在 Chrome 中可以正常工作,但在 Safari/iOS 中不行,用斜杠替换破折号可以解决此问题。否则 Date 函数会在 Safari 中中断。

      带有 - 的日期字符串不正确

      以下代码将返回以下内容

      new Date('03-25-2017');
      

      铬:

      Sat Mar 25 2017 00:00:00 GMT+0100 (CET)
      

      Safari:

      Invalid Date
      

      所以,只需将 - 替换为 /。

      用 / 更正日期字符串

      以下代码将返回以下内容

      new Date('03/25/2017');
      

      Chrome

      Sat Mar 25 2017 00:00:00 GMT+0100 (CET)
      

      *Safari:

      Sat Mar 25 2017 00:00:00 GMT+0100 (CET)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多