【问题标题】:How to convert dd/mm/yyyy string into JavaScript Date object?如何将 dd/mm/yyyy 字符串转换为 JavaScript Date 对象?
【发布时间】:2016-01-22 20:00:12
【问题描述】:

如何将23/10/2015 格式的日期转换为 JavaScript 日期格式:

Fri Oct 23 2015 15:24:53 GMT+0530 (India Standard Time)

【问题讨论】:

  • 你必须把它拆开,因为日期和月份可以互换位置。你试过什么?
  • 我使用了 split 方法,将其分隔为日期、月份、年份
  • 嗯,不清楚。 “正常日期”是什么意思,一个字符串? “javascript日期格式”是什么意思,像你发布的字符串或实际的JavaScript日期对象???
  • 是的,我也想将普通日期更改为 javascript 日期对象
  • 请告诉我们您目前拥有的代码。

标签: javascript date


【解决方案1】:

MM/DD/YYYY 格式

如果你有 MM/DD/YYYY 格式,这是 JavaScript 的默认格式,你可以简单地将你的字符串传递给 Date(string) 构造函数。它会为你解析它。

var dateString = "10/23/2015"; // Oct 23

var dateObject = new Date(dateString);

document.body.innerHTML = dateObject.toString();

DD/MM/YYYY 格式 - 手动

如果您使用这种格式,那么您可以拆分日期以分别获取日、月和年,然后在另一个构造函数中使用它 - Date(year, month, day):

var dateString = "23/10/2015"; // Oct 23

var dateParts = dateString.split("/");

// month is 0-based, that's why we need dataParts[1] - 1
var dateObject = new Date(+dateParts[2], dateParts[1] - 1, +dateParts[0]); 

document.body.innerHTML = dateObject.toString();

有关更多信息,您可以在Mozilla Developer Network 阅读有关Date 的文章。

DD/MM/YYYY - 使用 moment.js

或者,您可以使用 moment.js 库,这可能是 JavaScript 中最流行的用于解析和操作日期和时间的库:

var dateString = "23/10/2015"; // Oct 23

var dateMomentObject = moment(dateString, "DD/MM/YYYY"); // 1st argument - string, 2nd argument - format
var dateObject = dateMomentObject.toDate(); // convert moment.js object to Date object

document.body.innerHTML = dateObject.toString();
<script src="https://momentjs.com/downloads/moment.min.js"></script>

在所有三个示例中,dateObject 变量包含一个 Date 类型的对象,它代表一个时间点,并且可以进一步转换为任何字符串格式。

【讨论】:

  • 您应该将正确的类型(数字)传递给构造函数。 var dateObject: Date = new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);
  • 这个是给 Fri Oct 23 2015 00:00:00 GMT+0530 (IST),如果我们需要 "23 Oct 2015" 只是不完整的字符串
  • 全世界只有 一个 个国家使用 MM/DD/YYYY,它们将什么设置为默认的 JavaScript 格式?太烦人了。
  • 您可以使用正则表达式将日期格式从 dd/mm/yyyy 更改为 mm/dd/yyyy,反之亦然,如下所示: const originalDate = '23/07/2020'; const newDate = originalDate.replace(/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/g,'$2/$1/ $3'); // newDate = '07/23/2020';
  • 天哪,让 JavaScript 在减去它之前将此字符串转换为数字感到不舒服。
【解决方案2】:

这是我之前准备的一份……

  convertToDate(dateString) {
      //  Convert a "dd/MM/yyyy" string into a Date object
      let d = dateString.split("/");
      let dat = new Date(d[2] + '/' + d[1] + '/' + d[0]);
      return dat;     
  }

【讨论】:

    【解决方案3】:

    我发现默认的 JS 日期格式不起作用。

    所以我用toLocaleStringoptions

    const event = new Date();
    const options = { dateStyle: 'short' };
    const date = event.toLocaleString('en', options);
    

    获取:DD/MM/YYYY 格式

    有关更多格式选项,请参阅文档:https://www.w3schools.com/jsref/jsref_tolocalestring.asp

    【讨论】:

    • 这不是 OP 要求的。他们正在尝试将字符串转换为日期。
    • 不错的方法,非常感谢!
    【解决方案4】:

    虽然大多数回复与拆分字符串或使用本地日期方法相关,但使用 RegEx 的两个密切相关的回复(即 [drgol] 的回答和 [Tomás Hugo Almeida] 的评论)都对使用捕获具有指导意义团体。它们的简洁性也有助于说明捕获和distinguishing that from matching 的价值——这两个相关概念可能会使新的 RegEx 用户感到困惑。此代码块合并了他们的 2 个答案,但请参见上面的原件:const origDate = '23/07/2020'; const newDate = origDate.replace(/(\d+[/])(\d+[/])/, '$2$1'); // newDate = '07/23/2020';

    【讨论】:

      【解决方案5】:

      这是一种将带有一天中时间的日期字符串转换为日期对象的方法。例如将“20/10/2020 18:11:25”(“DD/MM/YYYY HH:MI:SS”格式)转换为日期对象

          function newUYDate(pDate) {
            let dd = pDate.split("/")[0].padStart(2, "0");
            let mm = pDate.split("/")[1].padStart(2, "0");
            let yyyy = pDate.split("/")[2].split(" ")[0];
            let hh = pDate.split("/")[2].split(" ")[1].split(":")[0].padStart(2, "0");
            let mi = pDate.split("/")[2].split(" ")[1].split(":")[1].padStart(2, "0");
            let secs = pDate.split("/")[2].split(" ")[1].split(":")[2].padStart(2, "0");
          
            mm = (parseInt(mm) - 1).toString(); // January is 0
          
            return new Date(yyyy, mm, dd, hh, mi, secs);
          }
      

      【讨论】:

        【解决方案6】:
        var dateString = "23/10/2015"; // Oct 23
        var newData = dateString.replace(/(\d+[/])(\d+[/])/, '$2$1');
        var data = new Date(newData);
        
        document.body.innerHTML = date.toString();ere
        

        【讨论】:

        • 请在您的答案中添加一些解释,以便其他人可以从中学习
        • 为我工作!!!
        【解决方案7】:
        <!DOCTYPE html>
        
        <script>
        
        dateString = "23/10/2015";    //23 Oct 2015
        
        d = dateString.split("/");
        
        x = d[1] + "/" + d[0] + "/" + d[2];    //"10/23/2015"
        y = d[2] + "/" + d[1] + "/" + d[0];    //"2015/10/23"
        
        alert(
        new Date(x) + "\n\n" +
        new Date(y) + "\n\n" +
        new Date(dateString) + "\n" +
        "");
        
        </script>
        

        【讨论】:

          【解决方案8】:

          你可以使用这个简短的功能

          // dateString: "15/06/2021"
            
          

          const stringToDate = (dateString) => {
            const [day, month, year] = dateString.split('/');
            return new Date([month, day, year].join('/'));
          };
          
          document.body.innerHTML = stringToDate("15/06/2021").toString();

          【讨论】:

          • 这没有回答问题,它的作用是将 dd/mm/yyyy 转换为 mm/dd/yyyy 字符串,而不是仅仅返回 Date 对象。此外,这与接受的答案相同。
          • 这是更简单的 es6 方法,我认为您没有看到返回的新日期,这正是答案
          【解决方案9】:
          var date = new Date("enter your  date");//2018-01-17 14:58:29.013
          

          一行就足够了,不需要做任何splitjoin等:

          $scope.ssdate=date.toLocaleDateString();//  mm/dd/yyyy format
          

          【讨论】:

          • OP 要求 DD/MM/YYYY 格式,JavaScript 中的 Date 不支持该格式
          • 他是对的,您可以通过date.toLocaleString("indian");date.toLocaleDateString("indian"); 获得所需的印度格式
          • Op 要求的是“字符串到日期”,而不是“日期到字符串”。
          猜你喜欢
          • 2022-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-30
          • 2022-12-18
          • 1970-01-01
          • 2013-06-30
          • 2018-05-19
          相关资源
          最近更新 更多