Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 new Date()和Date.parse()) var-exampleDate='23-12-2010 23:12:00';_Javascript_Date - Fatal编程技术网

关于JavaScript new Date()和Date.parse()) var-exampleDate='23-12-2010 23:12:00';

关于JavaScript new Date()和Date.parse()) var-exampleDate='23-12-2010 23:12:00';,javascript,date,Javascript,Date,我想将上面的字符串转换为日期,并尝试了一些方法: var-date=新日期(例如日期)//返回无效日期 var date1=Date.parse(exampleDate)//返回楠 这段代码在IE和Opera中运行良好,但是日期在Firefox中返回无效的日期,而日期1在Firefox中返回NAN。我应该怎么做?JavaScript应该至少支持从以下日期字符串进行转换: * yyyy/MM/dd * MM/dd/yyyy * MMMM dd, yyyy * MMM dd, yyyy 尝试:

我想将上面的字符串转换为
日期
,并尝试了一些方法:

var-date=新日期(例如日期)//返回无效日期
var date1=Date.parse(exampleDate)//返回楠

这段代码在
IE
Opera
中运行良好,但是
日期
在Firefox中返回无效的
日期
,而
日期1
在Firefox中返回
NAN
。我应该怎么做?

JavaScript应该至少支持从以下日期字符串进行转换:

* yyyy/MM/dd
* MM/dd/yyyy
* MMMM dd, yyyy
* MMM dd, yyyy
尝试:

  var exampleDate='12/23/2010 23:12:00';
  var date = new Date(exampleDate); 

示例中的字符串不是浏览器可以识别的任何标准格式。ECMAScript规范要求浏览器只能解析一种标准格式:

格式如下:
YYYY-MM-DDTHH:MM:ss.sssZ

此格式包括仅限日期的表格:

YYYY

YYYY-MM

YYYY-MM-DD

它还包括附加了可选时区偏移的仅时间表单:

THH:mm

THH:mm:ss

THH:mm:ss.sss

还包括“日期时间”,可以是上述任何组合

如果字符串不符合该格式,函数可能会返回到任何 特定于实现的试探法或特定于实现的日期格式。无法识别的字符串或日期 格式字符串中包含非法元素值将导致Date.parse返回NaN


因此,在您的示例中,使用
2010-12-23T23:12:00
是唯一保证工作的字符串。实际上,大多数浏览器也允许日期格式为
DD-Month-YYYY
Month-DD,YYYY
,因此像
2010年12月23日
2010年12月23日
这样的字符串也可以工作。

上述格式仅在IE和Chrome中受支持

因此,尝试其他格式。以下是一些格式和支持的浏览器

<script type="text/javascript">

//var dateString = "03/20/2008";  // mm/dd/yyyy [IE, FF]

 var dateString = "2008/03/20";  // yyyy/mm/dd [IE, FF]
// var dateString = "03-20-2008";  // mm-dd-yyyy [IE, Chrome]
// var dateString = "March 20, 2008";  // mmmm dd, yyyy [IE, FF]
// var dateString = "Mar 20, 2008";  // mmm dd, yyyy [IE, FF]

// Initalize the Date object by passing the date string variable
var myDate = new Date(dateString);
alert(myDate); 
</script>

//var dateString=“03/20/2008”;//年月日[即,日后]
var dateString=“2008/03/20”;//yyyy/mm/dd[即,日后]
//var dateString=“03-20-2008”;//年月日[即,Chrome]
//var dateString=“2008年3月20日”//年月日[即,日后]
//var dateString=“2008年3月20日”//年月日[即,日后]
//通过传递日期字符串变量初始化日期对象
var myDate=新日期(日期字符串);
警报(myDate);

您可以使用正则表达式手动解析它,然后使用日期元素调用日期构造函数,如下所示:

var parseDate = function(s) {
  var re = /^(\d\d)-(\d\d)-(\d{4}) (\d\d):(\d\d):(\d\d)$/;
  var m = re.exec(s);
  return m ? new Date(m[3], m[2]-1, m[1], m[4], m[5], m[6]) : null;
};
var dateStr = '23-12-2010 23:12:00';
parseDate(dateStr).toString(); //=> Thu Dec 23 2010 23:12:00 GMT-0800
使用此代码并执行以下操作:

var exampleDate='23-12-2010 23:12:00';
var myDate = Date.parseExact(exampleDate, 'dd-MM-yyyy hh:mm:ss');

myDate
应该是一个正确构造的
Date
对象。

只需使用以下格式:

var exampleDate='2010-12-23 23:12:00'; 

@卡萨布兰卡有一个很好的答案,但是已经10年多了,这在谷歌仍然有很大的影响力,所以我想我应该更新一个新的答案

TL;DR

//使用ISO或Unix时间字符串生成'Month DD,YYYY`
const newDate=新日期('23-12-2010')
const simpleDate=`${newDate.tolocalString('en-us',{month:'long'})}${newDate.getDate()},${newDate.getFullYear()}`
//收益率:2010年12月23日(如果你想要日期后缀,读到最后)
背景:日期有很多格式,但您主要会收到:

  • ISO 8601格式的日期(
    YYYY-MM-DDTHH:MM:ss.sssZ
    ),其中
    Z
    是UTC时区偏移量。您还可能会得到其中的一个子集(即,
    YYYY-MM-DD
  • Unix时间戳格式日期(
    1539734400
    ),其中的数字实际上是自1970年1月1日Unix时间开始以来的毫秒总数
Basics:JS有一个内置的日期原型,它接受ISO 8601和衍生产品(just time或just Date)。您可以使用
newdate
实例化并返回日期对象,也可以使用
Date.parse()
方法返回Unix时间戳

const dateObj=new Date('23-12-2010:23:12:00')//返回日期对象
const dateDateOnly=new Date('23-12-2010')//返回日期对象
const dateTimeOnly=new Date('23:12:00')//返回日期对象
const dateString=Date.parse('23-12-2010:23:12:00')//返回Unix时间戳字符串
您还可以将日期分为7个参数:年、月(从0开始)、天、小时、分钟、秒和毫秒以及时区偏移-注意,在我的职业生涯中,我只使用过一次多参数方法。由于我在德克萨斯州,当我运行以下命令时,我得到UTC-5(中央时间):

const dateByParam = new Date(2021, 2, 26, 13, 50, 13, 30) // Fri Mar 26 2021 13:50:13 GMT-0500 (Central Daylight Time)
New-ish Stuff
toLocaleString
通常,从
Date
对象返回的数据仍然非常密集,就像我们上一个示例(
Fri Mar 26 2021 13:50:13 GMT-0500(中央夏时制)
),因此添加了其他方法来帮助开发人员

通常,我想要一个日期,比如2021年3月21日,这一天和这一年很容易得到:

//假设myDate是JS日期对象。。。
myDate.getDate()//日历上的日期,即22
myDate.getDay()//一周中的哪一天,其中0表示星期日,1表示星期一,以此类推
myDate.getFullYear()//4位年份,即2021年
但是我总是需要构建一个函数来将
getDay
转换为
一月、二月、三月
,不再是了。
tolocalString()
给了你一些新的超能力。你可以给它传递两个参数,一个表示区域的字符串(即,
en-us
)和一个包含你想要返回的对象(即,
{month:'long'}
)。这有助于将响应国际化(如果需要)

//再次假设myDate是JS日期对象。。。
myDate.tolocalesting('en-us',{month:'long'})//三月
日期后缀我仍然没有看到内置的方法来获取日期后缀,比如
th,st
,所以我构建了
/**
 * setDateSuffix()
 * 
 * Desc: Takes two digit date, adds 'st', 'nd', 'rd', etc
 * 
 * @param { integer } num - a number date
 */

export const setDateSuffix = (num) => {
  const j = num % 10,
        k = num % 100

  if (j === 1 && k !== 11) {
    return num + "st";
  }
  if (j === 2 && k !== 12) {
    return num + "nd";
  }
  if (j === 3 && k !== 13) {
    return num + "rd";
  }

  return num + "th";
}