Javascript getDate函数返回错误的每月日期

时间:2015-12-03 21:08:06

标签: javascript date datetime

我在JavaScript中有一个函数,它在月份的错误日期返回,请帮我找出问题所在。

这是代码:

function getFormattedDate(date) {
   var year = date.getFullYear();
   var month = (1 + date.getMonth()).toString();
   month = month.length > 1 ? month : '0' + month;
   var day = date.getDate().toString();
   //condition ? value-if-true : value-if-false
   day = day.length > 1 ? day : '0' + day;
   return month + '/' + day + '/' + year;
 }

我从Oracle数据库传递/读取以下日期: 31-MAR-1944 - 这就是它在oracle桌子中的样子。

我得到以下返回值:03/30/1944

此功能的目的只是以不同的格式返回相同的日期,例如MM / DD / YYYY。

我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

试试这些,我想你会得到一些有助于你的信息:

getFormattedDate(new Date('31-MAR-1944 GMT'));
getFormattedDate(new Date('31-MAR-1944'));

第一个工作“不正确”,因为它将特定日期格式dd-mmm-yyyy字符串解析为GMT时区,而您显然比GMT,GMT-x落后x小时。但是,第二个“正确”工作,因为在函数计算开始之前,时间在您自己的时区。实际上,如果您只是检查传递给函数的基本日期值,您可以了解所需的一切。在我的电脑上这是一个例子:

new Date('31-MAR-1944 GMT')
// Thu Mar 30 1944 17:00:00 GMT-0700 (Pacific Daylight Time)

要将日期从当前时区转换回原始时区(根据您的看法,这很难说),您需要执行某些操作,例如使用其他格式,删除日期字符串中的时区,或组织中计算机之间的时区差异帐户。您可以看到使用getUtcDategetUtcMonth函数为您完成工作,或者您可以进行明确的时区计算。

从您的日期对象开始,然后在其上getTimezoneOffset()。这将以分钟为单位返回以百分比表示的GMT偏移的反转符号数。将服务器时间的时区偏移量转换为分钟,并适当地加或减。那么你的日期数学就可以得到一个格式化的日期。