原型日期格式验证OSX safari / firefox上的错误

时间:2014-09-11 10:55:27

标签: javascript jquery macos magento prototypejs

我在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也很好)

validate.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

谢谢!

2 个答案:

答案 0 :(得分:0)

只是简单地使用它:

['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);

}],

答案 1 :(得分:0)

今天我遇到了同样的问题,不要使用破折号作为分隔符。这在Chrome中运行良好但在Safari / iOS中无法正常工作,用斜线替换破折号可修复此问题。否则,日期功能将在Safari中中断。

与 -

的日期字符串不正确

以下代码将返回以下内容

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

<强>铬:

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

<强> Safari浏览器:

Invalid Date

所以,只需用/.

替换

使用/

更正日期字符串

以下代码将返回以下内容

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

<强>铬

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

* Safari浏览器:

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