【问题标题】:Trade settlement date in phpmysqlphp mysql中的贸易结算日期
【发布时间】:2018-08-01 13:01:29
【问题描述】:

我正在尝试实施一种结算日期算法,以检查我所在地区的当地公共假期,以查找内置于 php/mysql 中的小型交易应用程序。我将所有当地公共假期日期整齐地存储在我的数据库中,然后我使用变量输出。

应用程序应检查当前日期,然后添加三个工作日(减去周末),因为我国的结算周期遵循所有交易的 t+3 结算规则。这要求如果结算应该是在公共假期或周末,应用程序应该比较db表中的日期,然后设置一个新的工作日作为结算日期。

有人可以帮我解决我可能遗漏的问题吗?请在下面找到代码:

<?php 
$rsd = date ( 'Ymd' , strtotime ( '3 weekdays' ) ); 
$phd = $row_public_holidays['date'];

if ($rsd == $phd) {
echo date ( 'Ymd' , strtotime ( '4 weekdays' ) );
} else {
echo date ( 'Ymd' , strtotime ( '3 weekdays' ) );
}
?>

【问题讨论】:

  • 如果您需要两位数的日期格式,您应该在日期格式中使用 'd' 而不是 'j' - 'Ymd' 而不是 'Ymj'
  • 感谢您的意见安东。这是否意味着如果格式被调整,代码会计算?我还担心代码没有计算和提取所需的结果。如果代码计算的结果是真的,那么我应该将您的答案标记为正确的答案。

标签: php mysql


【解决方案1】:

如果您需要date 的输出为8 位,您可以将格式字符串从Ymj 更新为Ymd。将最后一个字符从 j 更改为 d 将不再显示:

没有前导零的月份中的某天

到:

月份中的日期,2 位数字,前导零

根据date (http://php.net/manual/en/function.date.php) 的文档。

把这些放在一起

strtotime 的调用执行计算并返回一个整数,该整数表示自确定(或提供)时区(http://php.net/manual/en/function.strtotime.php)中纪元以来的秒数。对date 的调用只是根据提供的格式(http://php.net/manual/en/function.date.php)将该整数格式化为字符串。

所以:

$time = strtotime('4 weekdays');
var_dump($time);

$date1 = date('Ymj', $time);
var_dump($date1);

$date2 = date('Ymd', $time);
var_dump($date2);

输出:

int(1533600000)
string(7) "2018087"
string(8) "20180807"

在此示例中,对 date 的调用不会更改 $time 的值。

【讨论】:

  • 感谢您的意见以及 msbit。这是否意味着如果格式被调整,代码会计算?我还担心代码没有计算和提取所需的结果。如果代码计算的结果是真的,那么我应该将您的答案标记为正确的答案。
  • @amldev 我已经在答案中添加了一些信息,以涵盖我理解您在这里提出的问题。
  • 谢谢@msbit。我已经开始工作了,但这只是难题的一部分。我担心的另一个问题是代码是否会计算,因为它应该比较数据库中的日期,然后应用差异。我想知道这段代码是否会计算。如果您需要更多详细信息来进一步阐明我的问题,请告诉我。
  • @amldev 不幸的是,我认为我并不完全了解您要达到的目标;您可能需要编辑问题,可能需要添加更多代码/上下文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多