【问题标题】:Extract date and time from string从字符串中提取日期和时间
【发布时间】:2013-02-09 10:43:15
【问题描述】:

我有一个日期\时间字符串:

2013 年 2 月 8 日星期五 09:47:57 GMT +0530 (IST)

我需要提取日期 (02/08/2013) 和时间 (09:47 am) 部分并将它们存储在两个变量中。

有没有使用 JavaScript 的有效方法?

我写了以下代码:

var day = elementDate.getDate(); //Date of the month: 2 in our example
            var monthNo = elementDate.getMonth(); //Month of the Year: 0-based index, so 1 in our example
            var monthDesc = {'0':'January', '1':'February'}; //, "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
            var year = elementDate.getFullYear() //Year: 2013
            var hours = elementDate.getHours();
            var mins = elementDate.getMinutes();
            var lDateValue = (year.toString() + "-" + monthNo.toString() + "-" + day.toString());

document.getElementById("lDate").value = lDateValue;

我的 HTML 中有这个:

<input type="date" name="name" id="lDate" class="custom" value=""/>
                <input type="time" name="name" id="lTime" class="custom" value=""  />

字段未更新。 我错过了什么吗?

【问题讨论】:

  • 日期构造函数应该能够获取该字符串,否则您可以使用正则表达式。

标签: javascript datetime


【解决方案1】:

您可以通过.toLocaleDateString().toTimeString() 方法使用Date constructor 直接获取日期和时间字符串,如下所示-

let dateStr =new Date("Wed Aug 05 18:11:48 UTC 2020")

dateStr.toLocaleDateString()
// "05/08/2020"

dateStr.toTimeString()
// "23:41:48 GMT+0530 (India Standard Time)"

【讨论】:

    【解决方案2】:

    Date 构造函数非常擅长从字符串创建日期:

    使用以下内容:

    // This could be any Date String
    var str = "Fri Feb 08 2013 09:47:57 GMT +0530 (IST)";
    var date = new Date(str);
    

    这将使您可以访问所有日期函数 (MDN)

    例如:

    var day = date.getDate(); //Date of the month: 2 in our example
    var month = date.getMonth(); //Month of the Year: 0-based index, so 1 in our example
    var year = date.getFullYear() //Year: 2013
    

    【讨论】:

      【解决方案3】:

      转换为 ISO 字符串并用“T”分割。

      不确定您分别对日期和时间做了什么。但是,如果您打算将它们存储在数据库中,最好将它们存储在 UTC 时区和 ISO 格式(例如 2013-02-0809:47:57)。

      要以这种格式获取日期和时间,您可以执行以下操作:

      const dateTimeInParts = yourDateTime.toISOString().split( "T" ); // DateTime object => "2021-08-31T15:15:41.886Z" => [ "2021-08-31", "15:15:41.886Z" ]
      
      const date = dateTimeInParts[ 0 ]; // "2021-08-31"
      const time = dateTimeInParts[ 1 ]; // "15:15:41.886Z"
      

      我认为这种格式的日期很好,但您可能还想从时间中去掉毫秒和“Z”,具体取决于您将在何处以及如何使用它。

      【讨论】:

      • 如果这样做,您会丢失时区信息。如果您想在当地时区向用户显示此信息,这并不理想。必须采取更长的方式使用.getDate().getMonth()等。
      猜你喜欢
      • 2020-08-14
      • 2011-03-31
      • 1970-01-01
      • 2023-01-04
      • 2013-06-14
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多