【问题标题】:How to format javascript date object?如何格式化javascript日期对象?
【发布时间】:2016-12-08 07:54:08
【问题描述】:

我有 2 个日期字段,我想比较它们的值。问题是我需要日期为 dd/mm/yyyy 格式并作为 js 日期对象。如何更改日期对象格式以接收 dd/mm/yyyy 并将它们与此格式进行比较?

这是我迄今为止尝试过的......

$('#date_customFrom').datepicker({
format: "dd/mm/yyyy"
  });
$('#date_customTo').datepicker({
format: "dd/mm/yyyy"
  });

$('.submit').on('click', function() {

 var start_date = $("input[name='date_customFrom']").val().split("/");
 var end_date = $("input[name='date_customTo']").val().split("/");

 var new_date_start = new Date(start_date[2], start_date[1] - 1, 
 start_date[0]);
 var new_date_end = new Date(end_date[2], end_date[1] - 1, end_date[0]);

 console.log(new_date_start);
 console.log(new_date_end);

});

fiddle

【问题讨论】:

  • moment.js 适合你
  • 试过了......似乎没有做我需要的......谢谢
  • new_date_start < new_date_end
  • 如果您只想检查同一天是否相等,请在转换为日期对象之前检查
  • 为什么不用var new_date_start = start_date[0] +'/'+ (start_date[1] - 1) +'/'+ start_date[2];var new_date_end = end_date[0] +'/'+ (end_date[1] - 1) +'/'+ end_date[2]; 应该使用split() 是必要的?或者只是输入字段中的直接值,因为您已经指定了日期选择器的日期输入格式?你能通过更新你的帖子来澄清一下吗?就目前而言,尚不清楚您的预期目标是什么。

标签: javascript jquery date formatdatetime


【解决方案1】:
 var dd = new_date_start.getDate();
    var mm = new_date_start.getMonth() + 1;//January is 0! 
    var yyyy = new_date_start.getFullYear();
    if (dd < 10) { dd = '0' + dd }
    if (mm < 10) { mm = '0' + mm }
     var res_START= dd + '/' + mm + '/' + yyyy;
 console.log(res_START);

试试这个

【讨论】:

    【解决方案2】:

    你需要使用 Moment.js

    Here is doc

    var momDt = moment('10.12.2016', 'DD/MM/YYYY');
    

    【讨论】:

      【解决方案3】:

      您可以将 Date 对象与基本的关系运算符进行比较。

      确保在拆分字符串后转换为数字,使用+parseInt

      +(start_date[2]) 
      Number(start_date[2])
      parseInt(start_date[2], 10)
      

      或者拆分后的map Number构造函数

      var start_date = $("input[name='date_customFrom']").val().split("/").map(Number);
      
      new Date(start_date[2], start_date[1] - 1,  start_date[0]);
      

      现在使用&lt;&lt;=&gt;&gt;= 进行比较。

      var start, end;
      
      start = new Date(2016, 11, 5);
      end = new Date(2016, 11, 4);
      
      console.log(start, end, start < end)
      
      start = new Date(2016, 11, 3);
      end = new Date(2016, 11, 4);
      
      console.log(start, end, start < end)

      【讨论】:

        【解决方案4】:

        首先,您不需要投射日期...日期选择器已经可以为您提供日期:

        var start_date = $("#date_customFrom").datepicker('getDate');
        var end_date = $("#date_customTo").datepicker('getDate');
        

        二、日期的正确格式是日期选择器是

        $('#date_customFrom').datepicker({
             dateFormat: "dd/mm/yyyy"
        });
        

        查看完整的格式列表

        http://api.jqueryui.com/datepicker/#utility-formatDate

        三、比较就是简单的使用关系比较

        if (start_date > end_date) {
        }
        

        【讨论】:

          【解决方案5】:

          你可以创建一个格式化函数:

          function formatDate(date, search, replacement)
          {
              var target = date.toISOString().slice(0, 10);
              return target.split(search).join(replacement);
          }
          

          并使用它:

          formatDate(new_date_start, "-", "/")
          

          这是您更新后的fiddle

          但我同意asdf_enel_hak 的评论,即moment.js 对你来说是一个更好的解决方案。

          更新

          我刚刚意识到上面不会考虑你的时区,所以这里是一个更新的函数:

          function formatDate(date, search, replacement)
          {
              var target = new Date(date);
              target.setMinutes(date.getMinutes() - date.getTimezoneOffset());
              target = target.toJSON().slice(0, 10);
              return target.split(search).join(replacement);
          }
          

          还有new fiddle

          【讨论】:

          • 如果你检查 console.log - 你会看到两个日期都是字符串...我需要它是日期对象.....
          • toISOString 使用 UTC,因此可以将日期更改一天。
          猜你喜欢
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多