我在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。
我做错了什么?
由于
答案 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)
要将日期从当前时区转换回原始时区(根据您的看法,这很难说),您需要执行某些操作,例如使用其他格式,删除日期字符串中的时区,或组织中计算机之间的时区差异帐户。您可以看到使用getUtcDate
和getUtcMonth
函数为您完成工作,或者您可以进行明确的时区计算。
从您的日期对象开始,然后在其上getTimezoneOffset()
。这将以分钟为单位返回以百分比表示的GMT偏移的反转符号数。将服务器时间的时区偏移量转换为分钟,并适当地加或减。那么你的日期数学就可以得到一个格式化的日期。