如何使用PHP准确确定一个月内的秒数?获取一年中秒数的最佳方法是除以12吗?
答案 0 :(得分:6)
将该月的天数乘以60 * 60 * 24
。
答案 1 :(得分:5)
由于节省了白天...用您的语言选择一个好的日期时间库并计算月份的第一天0:00:00和下个月的第一天0:00:00之间的差异并提取秒数。
答案 2 :(得分:2)
您需要多准确?
60秒* 60分钟* 24小时*本月Z天为您提供给定月份的准确数字。
如果您需要平均月份,请查看一年中的秒数,然后除以12。
在某些域名中,例如结算或法律域名,“月份”实际上可能正好是30天。
如果您正在多年工作或在分散系统之间进行紧密集成,则需要咨询资源以确定闰秒。对于历史数据,这可能是一个表,但是通过同步到可信时间源,您将更适合。
答案 3 :(得分:1)
60(秒)* 60(分钟)* 24(小时)* ##(月内天数)
答案 4 :(得分:1)
假设一天有86,400秒,您可以将此数字乘以DateTime.DaysInMonth
函数的结果(在C#中)。以下功能就是这样:
public double SecondsInMonth(int year, int month)
{
return DateTime.DaysInMonth(year, month) * 86400;
}
例如,找到当月的秒数:
double secondsInCurrentMonth = SecondsInMonth(DateTime.Now.Year, DateTime.Now.Month);
答案 5 :(得分:0)
给定月份的天数*小时/天*分钟/小时*秒/分钟
是最好的方式。
答案 6 :(得分:0)
如果你在纯数学中这样做,它将是60 * 60 * 24 * <number of days in month>
。
用例是什么?
答案 7 :(得分:0)
不,使用特定语言的可用日期API并确定当月的天数。然后计算秒数。还考虑到闰年。
答案 8 :(得分:0)
取决于您是想要平均月份还是特定月份....您的方式获得平均值。对于特定月份计数天数并乘以86400(每天24.0小时的秒数)
答案 9 :(得分:0)
这不是一个编程问题。月份有不同的长度,因此将一年中的秒数除以12将不会给您带来任何帮助。很容易确定一个月内的日子 - 一个简单的查找表加上闰年的计算就可以了。然后乘以一天中的秒数。
如果你真的很精确,你可能需要包括闰秒的计算,但由于它们是根据天文计算不可预测地分配的,并且不能提前预测,我可能会忽略它们。
答案 10 :(得分:0)
每个月的天数不同。适当的算法是获取飞蛾的天数并将其乘以86400(一天中的秒数)。您可能还需要平均计数或闰年计算...
答案 11 :(得分:0)
简单的答案是找到当月的天数,然后乘以86400.如果您处理UTC中的日期和时间,这将非常有效。但是,如果您使用的是本地时区,则如果该时区遵守夏令时,则此方法会产生稍微不正确的结果。错误在一个月内有些小,但如果您需要在短时间内(如一天)进行类似的计算,则会放大。我绝对建议在UTC中进行所有处理和存储,但根据应用程序,您必须将UTC时间转换为最终用户期望的本地时区。甚至可能有必要使用本地时区计算持续时间。同样,尽可能使用UTC,以避免大部分问题。
我在C#中提出了这个解决方案。它与UTC和本地时区兼容。您只需要告诉GetNumberOfSecondsInMonth
您希望计算基于哪个时区。在我的例子中,我选择了2010年11月,因为在密苏里州,我们观察到DST,本月还有一个小时。夏令时规则发生变化,因此我使用了一个API来从操作系统中提取DST信息,以便计算在2007年之前的几年内正确(即美国为大多数区域扩展DST时)。
我应该指出,我的解决方案不能处理UTC中的闰秒。对我来说,这绝不是一个问题。但如果真的需要超高精度计时,那么使用查找表就可以轻松解决这个问题。
public class Program
{
static void Main(string[] args)
{
int seconds = GetNumberOfSecondsInMonth(2010, 11, DateTimeKind.Local);
}
public static int GetNumberOfSecondsInMonth(int year, int month, DateTimeKind kind)
{
DateTime start = new DateTime(year, month, 1);
DateTime end = start.AddMonths(1);
int seconds = (int)(end - start).TotalSeconds;
if (kind == DateTimeKind.Local)
{
DaylightTime dt = TimeZone.CurrentTimeZone.GetDaylightChanges(year);
seconds = (dt.Start > start) ? seconds - 3600 : seconds;
seconds = (dt.End < end) ? seconds + 3600 : seconds;
}
return seconds;
}
}
答案 12 :(得分:0)
这是几个月的问题,因为它们没有固定的天数。但经过深思熟虑,我已经想出了怎么做。计算30或31天的月数并不是一个好主意,因为它看起来很糟糕,例如从1年转换到数月会给出11个月和25天的答案,如果我每个月有30天,如果我每个月有31天,则为12个月零5天。
相反,我每个月都要经历一系列日子:30,30,31,30,31,30,31,30,31,30,31,30,一年共计365天。因此,如果我想要4个月内的天数,我会增加30 + 30 + 31 + 30。如果我从23个月开始,它将经历几乎两次循环(23次30或31)。它是在while / until循环中完成的。每4年我增加1天,使其为366天(前30个在列表中更改为31)。它相当复杂,但它起作用,结果看起来更好。