gpt4 book ai didi

javascript - C# 与 Moment.js 中的日期差异计算

转载 作者:行者123 更新时间:2023-12-02 19:29:45 25 4
gpt4 key购买 nike

我正在计算两个日期。我需要找出用户在网站上使用契约(Contract)的剩余天数。我在数据库中存储了到期日期。我需要将其与当前日期进行比较,并获取剩余的天数来享受他们的订阅。

最初,剩余天数是在 C# 中计算的。

var daysLeft = Convert.ToInt32((data.expiryDate.Date - DateTime.Now.Date).TotalDays);
//Say, the expiryDate is Thu Dec 31 2020 00:00:00 GMT+0530 (India Standard Time), And daysLeft is 220 for the above statement

现在我在客户端的 Moment.js 中尝试了相同的操作。

moment(data.expiryDate).diff(moment(), 'days')
//Say, the expiryDate is Thu Dec 31 2020 00:00:00 GMT+0530 (India Standard Time) and it is giving 219.

我还尝试在将其转换为 YYYY-DD-MM 后减去相同格式的两个日期,如下所示,这给出了错误

moment(data.expiryDate).format('YYYY-DD-MM').diff(moment().format('YYYY-DD-MM'), 'days')
Object doesn't support property or method 'diff'

为什么在 C# 中是 220,而在 moment.js 中是 219?我错过了什么吗?请指出计算哪里出错了。

最佳答案

当你在 C# 中执行此操作时:

data.expiryDate.Date - DateTime.Now.Date

您实际上减去了一整天(因为.Date导致时间为00:00:00.000)。

现在,您在 js 中执行以下操作:

moment(data.expiryDate).diff(moment(), 'days')

这里的区别在于您减去日期和时间


注意(使用 .Now 而不使用 .Date):

var expiryDate = DateTime.Parse("12/31/2020 10:00:00");
Console.WriteLine((expiryDate.Date - DateTime.Now).TotalDays);

当带有.Date的相同代码返回220时,返回219.654703995023


TL;博士:

---------------------------------------------------------------
| moment.js | C# |
---------------------------------------------------------------
|moment() | DateTime.Now |
|moment().startOf('day')| DateTime.Today (=DateTime.Now.Date) |
---------------------------------------------------------------

如果您希望 javascript 部分获得相同的结果,您可能应该使用 .startOf('day') (这似乎相当于 .Date 根据至Moment.js | Home)

关于javascript - C# 与 Moment.js 中的日期差异计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61998168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com