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日期对象是否总是休息一天?_Javascript_Date - Fatal编程技术网

Javascript日期对象是否总是休息一天?

Javascript日期对象是否总是休息一天?,javascript,date,Javascript,Date,在我的Java脚本应用程序中,日期以如下格式存储: 2011-09-24 现在,当我尝试使用上面的值创建一个新的日期对象(这样我就可以以不同的格式检索日期)时,日期总是在一天之后返回。见下文: var doo = new Date("2011-09-24"); console.log(doo); 日志: 没关系,没有注意到GMT-0400,它导致日期是昨天 您可以尝试将默认“时间”设置为12:00:00这意味着2011-09-24 00:00:00 GMT,并且由于您在GMT-4,因此它将是

在我的Java脚本应用程序中,日期以如下格式存储:

2011-09-24
现在,当我尝试使用上面的值创建一个新的日期对象(这样我就可以以不同的格式检索日期)时,日期总是在一天之后返回。见下文:

var doo = new Date("2011-09-24");
console.log(doo);
日志:

没关系,没有注意到GMT-0400,它导致日期是昨天


您可以尝试将默认“时间”设置为12:00:00

这意味着
2011-09-24 00:00:00 GMT
,并且由于您在
GMT-4
,因此它将是前一天的
20:00


就我个人而言,我得到了
2011-09-24 02:00:00
,因为我住在
GMT+2

请注意,东部夏时制是
-4小时
,而你回来的日期是
20小时

20h + 4h = 24h
2011年9月24日午夜。日期以UTC(GMT)为单位,因为您提供了一个只包含日期的字符串,没有任何时区指示器。如果您提供了一个不带指示器的日期/时间字符串(
新日期(“2011-09-24T00:00:00”)
),它将在您的本地时区中解析。(从历史上看,这里存在不一致的情况,不仅仅是因为规范更改了不止一次,但现代浏览器应该可以;或者您可以始终包含时区指示器。)

你得到了正确的日期,只是你从来没有指定正确的时区

new Date('2020-05-07')
Wed May 06 2020 20:00:00 GMT-0400 (Eastern Daylight Time)
如果需要访问日期值,可以使用
getUTCDate()
或:


我认为这与时区调整有关。您创建的日期是GMT,默认时间是午夜,但您的时区是EDT,因此它减去4小时。请尝试以下操作以验证:

var doo = new Date("2011-09-25 EDT");

你的问题与时区有关。请注意部分
GMT-0400
-即您比GMT晚4小时。如果您在显示的日期/时间上再加4小时,您将正好在2011/09/24午夜到达。使用
toutString()
方法获取GMT字符串:

var doo = new Date("2011-09-24");
console.log(doo.toUTCString());

如果要获取本地时区中某个日期的0小时,请将各个日期部分传递给
date
构造函数

new Date(2011,08,24); // month value is 0 based, others are 1 based.
var dateString = "2011-09-24";
var dateParts = dateString.split("-");
var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);

要规范化日期并消除不需要的偏移(此处测试:):

这也实现了同样的效果,并归功于@tpartee(此处测试:):


这通过我循环,在zzzBov的答案上+1。以下是使用UTC方法对我有效的日期的完整转换:

//myMeeting.MeetingDate = '2015-01-30T00:00:00'

var myDate = new Date(myMeeting.MeetingDate);
//convert to JavaScript date format
//returns date of 'Thu Jan 29 2015 19:00:00 GMT-0500 (Eastern Standard Time)' <-- One Day Off!

myDate = new Date(myDate.getUTCFullYear(), myDate.getUTCMonth(), myDate.getUTCDate());
//returns date of 'Fri Jan 30 2015 00:00:00 GMT-0500 (Eastern Standard Time)' <-- Correct Date!
//myMeeting.MeetingDate='2015-01-30T00:00:00'
var myDate=新日期(myMeeting.MeetingDate);
//转换为JavaScript日期格式

//返回1月29日THU 2015 19:0:00 GMT-0500(东部标准时间)'> P> > <强> >多个疯狂< /强>发生在JS>强>日期<强>对象的字符串转换中,例如考虑以下提供的

日期 注意:以下示例可能是一天假,也可能不是一天假,具体取决于您所在的时区和当前时间

但是,如果我们将字符串格式重新排列为月-日-年

另一个奇怪的

创建新日期时,我们可以轻松更改日期“2011-09-24”中的连字符

如果我们有一个日期字符串,比如“2011-09-24T00:00:00”

现在将连字符更改为正斜杠;会发生什么

我通常需要管理日期格式2011-09-24T00:00:00,所以我就是这么做的

更新

如果为日期构造函数提供单独的参数,则可以获得其他有用的输出,如下所述

注意:参数可以是数字或字符串类型。我将展示具有混合值的示例

获取给定年份的第一个月和第一天

获取一年中的最后一个月和最后一天

数字、字符串参数的示例。请注意,月份是三月,因为又是以零为基础的月份

如果我们做同样的事情,但是一天为零,我们会得到不同的结果

向任何“年”和“月”参数中添加一天零将得到上个月的最后一天。如果你继续使用负数,你可以在另一天继续回滚


只想添加一点,显然在字符串末尾添加空格将使用UTC进行创建

new Date("2016-07-06")
> Tue Jul 05 2016 17:00:00 GMT-0700 (Pacific Daylight Time)

new Date("2016-07-06 ")
> Wed Jul 06 2016 00:00:00 GMT-0700 (Pacific Daylight Time)

编辑:这不是推荐的解决方案,只是一个备选答案。请不要使用这种方法,因为不清楚发生了什么。有很多方法可能会导致错误。虽然OP的时区是EDT,但不能保证执行脚本的用户在EDT时区,因此硬编码偏移量不一定有效。我找到的解决方案拆分日期字符串,并在日期构造函数中使用单独的值

new Date(2011,08,24); // month value is 0 based, others are 1 based.
var dateString = "2011-09-24";
var dateParts = dateString.split("-");
var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);

请注意,您必须解释另一个JS古怪之处:月份是以零为基础的。

以下内容对我很有用-

    var doo = new Date("2011-09-24").format("m/d/yyyy");

这可能不是一个好的答案,但我只想分享我在这个问题上的经验

var dates = price.deliveryDate.split(/-|T|:/);
var expDate = new Date(dates[0], dates[1] - 1, dates[2], dates[3], dates[4]);
var expirationDate = new Date(expDate);
<我的应用程序是全球使用UTC日期的格式YYYY-MM-DD,而DeDePikelPu插件只使用JS DATE,我很难同时考虑UTC和JS。因此,当我想将“YYYY-MM-DD”格式的日期传递给我的datepicker时,我首先使用moment.js或您喜欢的任何东西将其转换为“MM/DD/YYYY”格式,datepicker上显示的日期现在是正确的。以你为例

var d = new Date('2011-09-24'); // d will be 'Fri Sep 23 2011 20:00:00 GMT-0400 (EDT)' for my lacale
var d1 = new Date('09/24/2011'); // d1 will be 'Sat Sep 24 2011 00:00:00 GMT-0400 (EDT)' for my lacale

显然,d1是我想要的。希望这会对一些人有所帮助。

不使用更多转换方法处理此问题的最佳方法

 var mydate='2016,3,3';
 var utcDate = Date.parse(mydate);
 console.log(" You're getting back are 20.  20h + 4h = 24h :: "+utcDate);
现在只需在日期中添加GMT,也可以附加它

 var  mydateNew='2016,3,3'+ 'GMT';
 var utcDateNew = Date.parse(mydateNew);
 console.log("the right time that you want:"+utcDateNew)

Live:

您使用的是ISO日期字符串格式,根据,该格式使用UTC时区构造日期:

var doo = new Date("2011-09-24 EST");
var doo = new Date("2011-09-24 00:00:00")
注意:使用日期构造函数解析日期字符串(和 由于 浏览器差异和不一致。支持RFC 2822 forma
new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
// => Sat Dec 31 2011 00:00:00 GMT-0700 (MST)
new Date(2011, "02"); 
// => Tue Mar 01 2011 00:00:00 GMT-0700 (MST)
new Date(2011, "02", 0); // Again the zero roles back from March to the last day of February.
// => Mon Feb 28 2011 00:00:00 GMT-0700 (MST)
new Date(2011, "02", -1);
// => Sun Feb 27 2011 00:00:00 GMT-0700 (MST)
new Date("2016-07-06")
> Tue Jul 05 2016 17:00:00 GMT-0700 (Pacific Daylight Time)

new Date("2016-07-06 ")
> Wed Jul 06 2016 00:00:00 GMT-0700 (Pacific Daylight Time)
var dateString = "2011-09-24";
var dateParts = dateString.split("-");
var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);
    var doo = new Date("2011-09-24").format("m/d/yyyy");
var d = new Date('2011-09-24'); // d will be 'Fri Sep 23 2011 20:00:00 GMT-0400 (EDT)' for my lacale
var d1 = new Date('09/24/2011'); // d1 will be 'Sat Sep 24 2011 00:00:00 GMT-0400 (EDT)' for my lacale
 var mydate='2016,3,3';
 var utcDate = Date.parse(mydate);
 console.log(" You're getting back are 20.  20h + 4h = 24h :: "+utcDate);
 var  mydateNew='2016,3,3'+ 'GMT';
 var utcDateNew = Date.parse(mydateNew);
 console.log("the right time that you want:"+utcDateNew)
var dates = price.deliveryDate.split(/-|T|:/);
var expDate = new Date(dates[0], dates[1] - 1, dates[2], dates[3], dates[4]);
var expirationDate = new Date(expDate);
var doo = new Date("2011-09-24 EST");
var doo = new Date("2011-09-24 00:00:00")
let dateForDisplayToUser = 
  new Date( `${YYYYMMDDdateStringSeparatedByHyphensFromAPI} 00:00:00` )
  .toLocaleDateString( 
    'en-GB', 
    { day: 'numeric', month: 'short', year: 'numeric' }
  )
new Date('1993-01-20'.split('-')); 
new Date('2020-05-07')
Wed May 06 2020 20:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020/05/07')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-5-07')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-5-7')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-05-7')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-05-07'.replace('-','/'))
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date(Date.UTC(Year, Month, Day, Hour, Minute, Second))
Date.getUTCYear(), getUTCMonth(), getUTCDay(), getUTCHours()
process.env.TZ = 'UTC' // this has to be run before any use of dates
let format1 = "YYYY-MM-DD"
let date = new Date();

console.log(moment(date).format(format1))
var date = new Date();
//"Thu Jun 10 2021 18:46:00 GMT+0200 (Eastern European Standard Time)"

date.toString().split(/\+|-/)[0] ;  // .split(/\+|-/) is a regex for matching + or -
//"Thu Jun 10 2021 18:46:00 GMT"

var date_string_as_Y_M_D = (new Date(date)).toISOString().split('T')[0];
//2021-06-10