希望并感谢得到一些解释以下
这个问题是关于日期的,我知道我可以使用像moments这样的包,但是,在这种情况下,我不需要那么多地使用日期。我还知道从各自的Date get函数中获得的day和month返回的值比实际对应的值小1。
因此,我有一个将数据保存到数据库的表单,至于显示保存的数据,我需要将日期转换为yyyy-mm-dd格式,为此,我使用一个小函数和分离日期部分的方法,并将它们以适当的顺序重新加入日期选择器。
enter image description here
用于格式化日期的函数(对不起,所有的日志)
enter image description here
对于每条记录,此函数被调用两次,因为每条记录有两个日期,控制台输出如下:
enter image description here
// the code for the function
export function dateToPug(dateIso) {
console.log('\ndate string from db' , dateIso, '\n')
const date = new Date(dateIso)
console.log('toDateString',date.toDateString(), '\n')
console.log('date string converted to date', date.toISOString(), '\n')
const day = (date.getDate())// + 1)
console.log('day extracted from date', day, '\n')
// day < 10 ? day =`0${date.getDate()}` : ''
const month = (date.getMonth())// + 1)
console.log('month extracted from date', month, '\n')
// month < 10 ? `0${date.getMonth()}` : ''
const year = date.getFullYear()
console.log(`${year}-${month}-${day}`, '\n')
return `${year}-${month}-${day}`
}
//输出
date string from db **1900**-**10**-**10**T00:00:00.000Z // first date from the database record
toDateString Tue **Oct** **09** 1900 // converted to date string changes the day but not the month
date string converted to date **1900-10-10**T00:00:00.000Z // date in iso format
day extracted from date **9** // got day -1 as expected
month extracted from date **9** // got month -1 as expected
**1900-9-9** // date in format for the form input date (with trimmings that will have to be removed)
date string from db **1950**-**10**-**10**T00:00:00.000Z // second date from the database record
toDateString Tue **Oct** **10** 1950 // converted to date string neither change the day nor the month
date string converted to date **1950-10-10**T00:00:00.000Z // date in iso format
day extracted from date **10** // got day unchanged
month extracted from date **9** // got month -1 as expected
**1950-9-10** // date in format for the form input date (with trimmings that will have to be removed)
我错过了什么?
2条答案
按热度按时间sd2nnvve1#
您没有考虑时区差异。
我在你的函数中添加了这一行
使用node.js测试:
getDate()
返回1-31,即该月的实际日期,而getMonth()
返回0-11,即month - 1,因此这正确地指示了所述时区偏移的月9日。请注意,伦敦10月10日上午12点(UTC)对于整个西半球来说仍然是10月9日。
日期函数默认使用本地系统时区。根据您运行代码的方式,您可能需要显式指定时区设置,以使其按照您想要的方式运行。
或者只是利用已经解决这个问题的其他人多年的工作,并使用日期时间库。
zzlelutf2#
我就是这样解决的,至少我知道。最后,我终于找到了一个图书馆。但不是现在。