【问题标题】:Parse string to Date object with specific format将字符串解析为具有特定格式的日期对象
【发布时间】:2019-04-30 11:05:17
【问题描述】:

我正在尝试从具有特定格式的字符串中获取 Date js 对象。

我的字符串日期如下所示:

2019-04-22 05:00:11

我正在尝试这样做,但我没有达到预期的结果:

date_string = "2019-04-22 05:00:11"
date = Date.parseDate(date_string, "YYYY-MM-DD HH:mm:ss")

在此之后,我想将此 Date 对象添加为 30 分钟的 time_delta 并以字符串格式表示它,我认为应该这样做:

new_date = new Date(date.getTime() + i*30*60000)
final_date_string = new_date.toString();

我希望final_date_string 看起来像这样:

2019-04-22 05:30:11

【问题讨论】:

    标签: javascript date format


    【解决方案1】:

    试试这个代码:

    let [y,M,d,h,m,s] = '2019-04-22 05:00:11'.split(/[- :]/);
    new Date(y,parseInt(M)-1,d,h,parseInt(m)+30,s);
    

    根据分隔符拆分日期字符串,然后根据您需要的任何时间更改将其转换为日期对象。

    【讨论】:

      【解决方案2】:

      感谢@RobG 对Date.parse() 方法的潜在错误的精彩评论。

      尝试使用Vanilla JavaScript的getTime()函数并添加30秒:

      let date_string = "2019-04-22 05:00:11"
      let dateArray = date_string.split(/[- :]/);
      let plusThirty = new Date(dateArray[0], parseInt(dateArray[1]-1), parseInt(dateArray[2])
          , dateArray[3], parseInt(dateArray[4]) + 30, dateArray[5]);    
      console.log('plusThirty: ', plusThirty);
      
      let dateString = plusThirty.getFullYear() + "-" + (plusThirty.getMonth() + 1) 
          + "-" + plusThirty.getDate() + " " + plusThirty.getHours() + ":" 
          + plusThirty.getMinutes() + ":" + plusThirty.getSeconds();
      console.log('dateString: ', dateString);
      

      输出:

      plusThirty:  Mon Apr 22 2019 05:30:11
      dateString:  2019-4-22 5:30:11
      

      【讨论】:

      • @RobG 对不起,你为什么要问'Date.parse()'?在我看来,我没有使用“Date.parse()”函数。
      • new Date(date_string) 使用内置解析器。您不应将内置解析器用于任何非标准格式,例如在 Safari 中 new Date("2019-04-22 05:00:11") 返回无效日期。你真的不应该将 if 用于标准化格式,因为对于某些格式,你仍然会得到意想不到的结果。
      • @RobG 感谢您的精彩评论!这真的很有帮助!我已经编辑了我的答案。
      【解决方案3】:

      您可以根据需要使用 momentjs,momentjs 是 DateTime 句柄的流行库

      let date_string = "2019-04-22 05:00:11"
      let date = moment(date_string, "YYYY-MM-DD HH:mm:ss");
      date.add(30, 'minutes');
      
      console.log(date.format('YYYY-MM-DD HH:mm:ss'));
      

      let date_string = "2019-04-22 05:00:11"
      let date = moment(date_string, "YYYY-MM-DD HH:mm:ss");
      date.add(30, 'minutes');
      
      final_date_string = date.format('YYYY-MM-DD HH:mm:ss')
      console.log(final_date_string);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>

      【讨论】:

      • 谢谢,这正是我想要的
      • 对于这样一个简单的任务,不需要 jQuery(这是无关紧要的,也没有在答案中的任何地方使用)或 moment.js。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-25
      • 2016-05-17
      相关资源
      最近更新 更多