我需要计算两个日期之间的天数,小数点后6位。我正在使用以下function:
/**
* Calculates the day difference for two given dates.
*
* @param {Date} from , the start date
* @param {Date} to , the end date
*
* @return {Number} the day difference
*/
function calculateDayDifference( from, to ) {
var dayDifference;
const ONEDAY = 1000 * 60 * 60 * 24;
if ( from != null && to != null ) {
dayDifference = Math.abs( from - to ) / ONEDAY;
}
return dayDifference;
}
问题是,以下示例的计算不正确:
返回 8.625 ,但正确的值为 8,583333 。这个错误的值differs 1 hour from the correct value。
在以下情况中:
返回值 6,416667 是正确的。
答案 0 :(得分:2)
这是由于夏令时。
代码工作正常,8.625是这两个日期之间的适当时间。如果你不想处理时间变化,使用UTC时间,它没有夏令时,并且(几乎?)所有语言都可用。
答案 1 :(得分:0)
使用.toFixed(6)
function calculateDayDifference( from, to ) {
var dayDifference;
const ONEDAY = 1000 * 60 * 60 * 24;
if ( from != null && to != null ) {
dayDifference = (Math.abs( from - to )).toFixed(6); / ONEDAY;
}
return dayDifference;
}
答案 2 :(得分:0)
在javascript中,Math.abs函数可以在浮点值后给出Rounded精度点。
我已经测试了一个您可以使用此.toFixed(6)
查看的示例,您可能会得到解决方案。
today=new Date()
var christmas=new Date(today.getFullYear(), 11, 25)
if (today.getMonth()==11 && today.getDate()>25)
christmas.setFullYear(christmas.getFullYear()+1)
var one_day=1000*60*60*24
document.write(((christmas.getTime()-today.getTime())/(one_day)).toFixed(6)+"
days left until Christmas!")
随意问, 谢谢,
答案 3 :(得分:0)
我的修复是将以下内容添加到代码中:
if ( from.getTimezoneOffset( ) !== to.getTimezoneOffset( ) ) {
if ( from.getTimezoneOffset( ) < to.getTimezoneOffset( ) ) {
to.setHours( to.getHours( ) - 1 );
} else if ( from.getTimezoneOffset( ) > to.getTimezoneOffset( ) ) {
to.setHours( to.getHours( ) + 1 );
}
}