从没有时区的字符串构造javascript日期(对于JqueryUI datepicker)

时间:2016-07-21 21:40:57

标签: javascript jquery date jquery-ui timezone

我正在使用jQueryUI Datepicker库,我需要为它提供一个动态加载日期的日期。

我设置了我的日期选择器:

$("#thePicker" ).datepicker({
             dateFormat: 'yy-mm-dd',
             showOtherMonths: true,
             changeMonth: true,
             changeYear: true,
             minDate: new Date('2016-04-28'),
        });

其中'2016-04-28'是一个在加载时可能会有所不同的字符串。

由于时区转换,这会将最低允许日期设置为2016年4月27日。

如果我提供了上面显示的格式的字符串,那么我应该如何为minDate构建这个新日期,以便没有时区相关?

1 个答案:

答案 0 :(得分:1)

如果日期是一个字符串并且总是" YYYY-MM-DD",我会这样做:

https://fiddle.jshell.net/Twisty/eknxxqvh/

$(function() {
  var dString = "2016-04-28";
  var yy = parseInt(dString.substring(0, 4));
  var mm = parseInt(dString.substring(5, 7)) - 1;
  var dd = parseInt(dString.substring(8));
  $("#thePicker").datepicker({
    dateFormat: 'yy-mm-dd',
    showOtherMonths: true,
    changeMonth: true,
    changeYear: true,
    minDate: makeDate("2016-04-28"),
    /* Alternate Method 1
    minDate: new Date(yy, mm, dd),
    /* Alternate Method 2
    minDate: new Date(parseInt("2016-04-28".substring(0,4)), parseInt("2016-04-28".substring(5,7))-1, parseInt("2016-04-28".substring(8))),
    */
  });

  function makeDate(ds) {
    var yy = parseInt(ds.substring(0, 4));
    var mm = parseInt(ds.substring(5, 7)) - 1;
    var dd = parseInt(ds.substring(8));
    var d = new Date(yy, mm, dd);
    return d;
  }
});

根据您在页面中使用此功能的频率,将定义哪种方法最适合您。