Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中从时间获取Meridian_Javascript_Jquery_Date_Datetime - Fatal编程技术网

在Javascript中从时间获取Meridian

在Javascript中从时间获取Meridian,javascript,jquery,date,datetime,Javascript,Jquery,Date,Datetime,我有以下时间“2015年6月22日星期一03:45:24 PDT”如何使用Javascript获取Meridian。 我是这样做的: d= Mon Jun 22 03:45:24 PDT 2015; var hours = d.getHours(); var meridiem = "AM"; if (d.getHours() > 12) { hours = d.getHours() % 12; if (hours == 2) { hours = 12; }

我有以下时间“2015年6月22日星期一03:45:24 PDT”如何使用Javascript获取Meridian。 我是这样做的:

d= Mon Jun 22 03:45:24 PDT 2015;
var hours = d.getHours();
var meridiem = "AM";

if (d.getHours() > 12) {
   hours = d.getHours() % 12;
   if (hours == 2) {
      hours = 12;
   }
   meridiem = "PM";
}
但它在IE8中不起作用。

您定义

d= Mon Jun 22 03:45:24 PDT 2015;
实际上,它在javascript中什么都不是 有些浏览器更智能,有些则不然,这取决于浏览器的行为 你必须这样告诉javascript

  function getCurrentTime() {
                var currentTime;
                // here we can give our date
                var currentDate = new Date("Mon Jun 22 03:45:24 PDT 2015");
                // OR we can define like that also for current date
                // var currentDate = new Date();
                var hour = currentDate.getHours();
                var meridiem = hour >= 12 ? "PM" : "AM";
                currentTime = ((hour + 11) % 12 + 1) + ":" + currentDate.getMinutes() + meridiem;
                return currentTime;
            }

根据JavaScript
Date
对象的文档,没有直接获取12小时的方法,因此没有直接从
Date
对象获取am/pm的方法

您可以获取小时数(24小时格式),您可以使用它获取12小时和上午/下午。(您已经完成了,但我不明白您试图在代码中做什么。)

这将是实现这一目标的一种方法

这段代码的灵感来自@tinka

var d = new Date("Mon Jun 22 03:45:24 PDT 2015");
var h = (d.getHours() + 11) % 12 + 1; //Courtesy @tinka
var m = h > 12 ? 'pm' : 'am';
如果要重复使用,您可以随时将方法添加到
Date.prototype

Date.prototype.getHours12 = function() {
   return (this.getHours() + 11) % 12 + 1; // edited.
}

Date.prototype.getMeridiem = function() {
   return this.getHours() > 12 ? 'pm' : 'am';
}

它应该可以在所有平台上运行。

我们可以以12小时的格式获取时间,包括meridian,方法使用美式英语参数,该参数以AM/PM返回时间。如果没有参数
“en-US”
date将返回它认为适合您时区的格式

在此基础上,我们可以利用该方法使用负索引获取时间戳的最后两个字符:

var d = new Date("Mon Jun 22 03:45:24 PDT 2015")
  // US English uses 12-hour time with AM/PM
var timestamp = d.toLocaleTimeString('en-US');
  // timestamp → "03:45:24 AM"
var meridian = timestamp.slice(-2);
  // meridian → "AM"
一行为简洁起见:

var meridian = new Date("Mon Jun 22 03:45:24 PDT 2015").toLocaleTimeString().slice(-2);
带日期对象:

getMeridiem(date: Date) {
   return date.toLocaleTimeString().split(' ')[1];
}

我没有得到什么
d=Mon Jun 22 03:45:24 PDT 2015是应该做的。这甚至不是合法的JavaScript代码。在IE 8中,我得到了Nan,所以我使用了以下方法函数convertDateFromISO(s){s=s.split(/\D/);返回新日期(Date.UTC(s[0],--s[1]| |‘,s[2]|‘,s[3]|‘,s[4]|‘,s[5]|‘,s[6]|‘),这给了我这个日期“2015年6月22日星期一03:45”你到底是如何得到NaN的?如果需要当前日期,可以执行
新建日期()
。如果您已经有ISO格式的日期,您可以使用
新日期(“Mon Jun 22 03:45:24 PDT 2015”)
直接解析它。您是说使用
(新日期(“Mon Jun 22 03:45:24 PDT 2015”)。getTime()在IE8中为您提供
NaN
?(很抱歉,无法复制,没有IE)。由于我确实喜欢该代码,对此的解释将不胜感激。@A1rPun您是对的,我感谢您的建议,但我当时没有找到任何要写的东西,可能是我错了,但发布的用户应标记为答案,因为它正在工作:)您可以解释为什么它不适用于OP,或者他能改进什么。在我链接的答案中引用@casperOne:
我们是教别人钓鱼的人。代码只能回答一天的问题。