【问题标题】:Convert a AM/PM date string to JavaScript date using jQuery使用 jQuery 将 AM/PM 日期字符串转换为 JavaScript 日期
【发布时间】:2018-09-19 20:54:21
【问题描述】:

我有一个类似20/09/2018 12:00 AM 的日期字符串。我需要停下来把上一个日期比今天。我在网上搜索过,但没有找到这种格式的答案。

我需要 JavaScript 的默认日期格式,以便与 new Date() 值进行比较。当我使用以下格式时,由于我的dd/MM/yyyy hh:mm tt 格式,它会显示invalid date 的消息。

alert(new Date("20/09/2018 12:00 AM"));

【问题讨论】:

  • 为什么“使用 jquery”?这与 dom 操作无关。这纯粹是一个逻辑问题。
  • 我需要在脚本中使用它。检查日期不是以前的。我有来自输入字段的值,需要自定义 javascript 日期对象。
  • javascript != jquery.一个是语言,另一个是框架。这里不需要使用jquery。
  • 我建议你尝试使用moment.js来解决这个问题,你可以在解析日期/时间字符串时指定格式,并且有很多方便的函数,如isAfterisBefore
  • 我也正要提到 moment.js。你可以这样做:var m = moment("20/09/2018 3:14 PM", "DD/MM/YYYY h:mm a"); m.toDate();

标签: javascript jquery date-format


【解决方案1】:

Igor 推荐使用 moment.js 来解决这个问题——它是一个广泛使用的日期/时间库。

使用 moment.js,您可以这样做:

var m = moment("20/09/2018 3:14 PM", "DD/MM/YYYY h:mm a");
var d = m.toDate();

第一行通过根据指定为第二个参数的格式字符串解析日期来创建一个“时刻”对象。见http://momentjs.com/docs/#/parsing/

第二行获取moment对象封装的原生javascriptDate对象;但是,时刻可以做很多事情,您可能不需要取回该原生对象。

请参阅moment docs

【讨论】:

    【解决方案2】:

    您的格式无效,因此您收到invalid date 错误。因此,使用您的格式(dd/MM/yyyy hh:mm tt),我们将获取年、月、日、小时和分钟,然后我们将通过Date 构造函数将其重新格式化为可接受的格式并创建Date 实例。

    这是一个执行所有操作并返回一个 Date 实例的函数,您可以将它与另一个 Date 实例进行比较:

    function convertToDate(str) {
      // replace '/' with '-'
      str = str.replace(/\//ig, '-');
      
      /**
      * extracting the year, month, day, hours and minutes.
      * the month, day and hours can be 1 or 2 digits(the leading zero is optional).
      * i.e: '4/3/2022 2:18 AM' is the same as '04/03/2022 02:18 AM' => Notice the absence of the leading zero.
      **/
      var y = /\-([\d]{4})/.exec(str)[1],
          m = /\-([\d]{2}|[\d])/.exec(str)[1],
          d = /([\d]{2}|[\d])\-/.exec(str)[1],
          H = /\s([\d]{2}|[\d]):/.exec(str)[1],
          i = /:([\d]{2})/.exec(str)[1],
          AMorPM = /(AM|PM)/.exec(str)[1];
      
      // return a Date instance.
      return new Date(y + '-' + m + '-' + d + ' ' + H + ':' + i + ' ' + AMorPM)
    }
    
    // testing...
    var str1 = '20/09/2018 12:00 AM';
    var str2 = '8/2/2018 9:00 PM'; // leading zero is omitted.
    console.log(convertToDate(str1));
    console.log(convertToDate(str2));

    Date 取决于用户/服务器的位置,两个用户可能有 不同的结果。

    Learn more 关于Date

    希望我把你推得更远。

    【讨论】:

    • 当我运行代码 sn-p 时,两个示例都返回 null
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多