Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 引导数据采集器在显示时对日期的格式不同于在值时对日期的格式_Javascript_Twitter Bootstrap_Datetime_Datepicker_Formatting - Fatal编程技术网

Javascript 引导数据采集器在显示时对日期的格式不同于在值时对日期的格式

Javascript 引导数据采集器在显示时对日期的格式不同于在值时对日期的格式,javascript,twitter-bootstrap,datetime,datepicker,formatting,Javascript,Twitter Bootstrap,Datetime,Datepicker,Formatting,我想使用Twitter引导的日期选择器。我希望实际输入以mm/dd/yyyy格式显示,但我希望创建/传递的对象的值应为yyyy-mm-dd格式。我知道此属性: "data-date-format" => "mm-dd-yyyy" 但这会改变日期的显示方式和值的格式。我的JS中也有: $(this).datepicker({ format: 'yyyy-mm-dd', autoclose: true, todayHighlight: true, pickTime: fals

我想使用Twitter引导的日期选择器。我希望实际输入以mm/dd/yyyy格式显示,但我希望创建/传递的对象的值应为yyyy-mm-dd格式。我知道此属性:

"data-date-format" => "mm-dd-yyyy"
但这会改变日期的显示方式和值的格式。我的JS中也有:

$(this).datepicker({
  format: 'yyyy-mm-dd',
  autoclose: true,
  todayHighlight: true,
  pickTime: false
});

我真的不确定格式部分在做什么,但更改它并不会更改输入创建的值。

当我面临这样一个问题时,我希望数据的显示方式不同于我希望它的通信方式,我通常编写一个简短的脚本,将值复制到一个隐藏元素中,在该元素中维护用户看不到的“正确”格式的数据


这是目前我能提供的最好的解决方案,因为我不知道有什么方法可以说服Bootstrap Datepicker同时使用两种格式。

对于这个问题,Bootstrap有一个解决方案

正如上面所说的

您可以使用两个解析函数将格式设置为对象:toValue和toDisplay

$('.datepicker').datepicker({
format: {
    /*
     * Say our UI should display a week ahead,
     * but textbox should store the actual date.
     * This is useful if we need UI to select local dates,
     * but store in UTC
     */
    toDisplay: function (date, format, language) {
        var d = new Date(date);
        d.setDate(d.getDate() - 7);
        return d.toISOString();
    },
    toValue: function (date, format, language) {
        var d = new Date(date);
        d.setDate(d.getDate() + 7);
        return new Date(d);
    }
  },
   autoclose: true 
});

下面是将值复制到隐藏元素以保持yyyy-mm-dd格式的示例脚本:

    $('.datepicker').on('changeDate', function(e){
        var date = e.date;
        var day = ('0' + date.getDate()).slice(-2);
        var month = ('0' + (date.getMonth() + 1)).slice(-2);
        var year = date.getFullYear();
        console.log(year + '-' + month + '-' + day);
        $(this).next('input[type=hidden]').val(year + '-' + month + '-' + day);
    });

我想在Chrome、FF、Edge和Safari中使用默认的日期选择器。特别是,我想要手机上的滚动行为

我将输入类型设置为“日期”,并将值传递为yyyy-mm-dd。这在Chrome、FF、Edge和Safari上非常有效。自动将格式设置为mm/dd/yyyy,Safari除外,Safari显示更长的格式

IE不支持“日期”类型。因此,当我将数据传递到“date”文本框时,需要手动将其转换为mm/dd/yyyy格式,然后使用引导日期选择器

因此,我测试IE。如果是,则在val()中进行转换


我也想看到这个功能,我想显示在当地的英国格式(dd/mm/yyyy)的日期,但它需要被解析为yyyy-mm-dd由于一个软件我正在使用。另外,我认为“数据日期格式”和“格式”是一样的,只是一个是通过HTML附加的,另一个是通过JS附加的。谢谢。这根本不能解决原来的问题:显示的日期仍然是表单提交上发布的日期。这只允许您定义“字符串到日期”和“日期到字符串”转换函数,以便可以手动编辑输入字段,使其与“日历”视图保持一致。@ZeRemz这似乎对我和OP都有效,太奇怪了。
     // Format the values to be mm/dd/yyyy
     ElementsJQ.val(function (index, value) {
          
          // Check for a date value
          let testDate = new Date(value);
          if (isNaN(testDate.getMonth())) {
               $(this).attr('value', '');
                return '';
           }

           // Parse the value to get its parts
           let dateParts_ = value.split('-');
           if (dateParts_.length != 3) {
               $(this).attr('value', '');
               return '';
           }

           // Create formatted date
           let formattedDate = dateParts_[1] + '/' + dateParts_[2] + '/' + dateParts_[0];

           // Test - real date?
           testDate = new Date(formattedDate);
           if (isNaN(testDate.getMonth())) {
               $(this).attr('value', '');
               return '';
           }

           $(this).attr('value', formattedDate);
           return formattedDate;
            });

            // Apply bootstrap date picker.
            ElementsJQ.datepicker();

        }