从日期时间字符串中提取小时

时间:2019-08-22 10:42:23

标签: javascript

我有一个如下所示的日期时间字符串:

Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)

我需要从字符串中获取小时,以便可以在变量中使用它。

例如,我在上面的字符串中寻找的结果将是:07

我该怎么做?

7 个答案:

答案 0 :(得分:1)

 var d = new Date("Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)")
   console.log(d.getHours());

答案 1 :(得分:1)

您可以从字符串创建Date对象,然后从中提取小时数。

var date = new Date("Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)");
var hours = date.getHours(); // -> 8
// If you want a leading zero for 1 digit hours
if(hours < 10) hours = "0" + hours; // -> "08"

答案 2 :(得分:1)

如上面的答案所述,类似:

new Date("Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)").getHours()

...将返回日期中的小时部分,但是需要注意三件事:

  1. 这将是系统的当前时区中的小时数,而不必是给出日期的时区。(还有另一种方法getUTCHours(),它总是返回小时数用于UTC。)
  2. 它将是一个数字,而不是小于10时以0开头的字符串。
  3. 如果要查找的话,将是24小时制,取值范围是0-23,而不是AM / PM。

如果您始终希望获得原始日期中提供的小时,则使用正则表达式解析从日期开始的小时会是一个更好的主意。但是,正则表达式的外观取决于您对各种原始日期/时间格式的灵活性要求。

为获得更大的灵活性,您可以像这样解析日期/时间:

const dateStr = 'Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)';
const date = new Date(dateStr);`

...然后还解析给定的原始小时偏移量:

const parts = /(?:GMT|UTC)([-+])(\d\d)(\d\d)/.exec(dateStr);
const offsetMinutes = parts ? (parseInt(parts[2]) * 60 + parseInt(parts[3])) * (parts[1] === '-' ? -1 : 1) : 0;

然后,通过做更多的工作,将其转换为您喜欢的任何时区偏移量。

请注意,时区偏移量并不总是整个小时,因此一个时区中可能会有两个不同的小时,而另一个时区中会匹配一个小时,具体取决于小时数。

哦,还有一件事...

使用此正则表达式:

/[T ](\d{1,2}):/.exec(dateStr)[1]T之后有一个空格)

...将非常可靠地从最初的日期中提取各种日期/时间字符串。上面的代码被编写为正则表达式不会失败。将其分解为测试/[T ](\d{1,2}):/.exec(dateStr)不是null之前,再使用[1]提取小时以获得更可靠的代码。

答案 3 :(得分:0)

如果您希望精确地输入小时数字符串,则可以进行以下处理:

new Date().getHours().toString().padStart(2, '0');

它将:

1)将小时数提取为数字(<10时为单个数字)

2)将其转换为字符串

3)小于10时添加前导零

答案 4 :(得分:0)

@onik的代码看起来不错,但是由于某种原因,它返回小时+ 1

var hour = new Date("Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)")
console.log(hour.getHours());


// returns hour + 1 for some reason

宁可这样做

var hour = new Date("Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)")
console.log(hour.getHours() - 1);

在下面运行摘要,亲自看看

答案 5 :(得分:0)

这将是24小时制,值介于0-23之间,因此我们必须添加+1

       var d = new Date("Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)")
    let hourtime=document.getElementById('hourtime');
    hourtime.innerHTML=d.getUTCHours()+1
<strong id="hourtime"></strong>

答案 6 :(得分:0)

在es6中,

logSh5(int, int):
        mov     ecx, esi
        mov     eax, 2147483647
        sar     eax, cl
        sar     edi, cl
        lea     eax, [rax+1+rax]
        and     eax, edi
        ret

构造一个具有给定时间的日期对象,现在获得一个小时数

 const MyDate = new Date("Thu Aug 15 2019 07:15:03 GMT+0100 (British Summer Time)")