- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我尝试了一些日期函数,因为我想用 PHP 获取下个月的一些日期,但是我遇到了一些问题。
作为 MySQL 兼容时间戳的当前日期 (date('Y-m-d H:i:s');
) 如下:'2012-05-31 14:59:19'
date('', strtotime('next month'));
给出下个月的天数,返回31 结果...这是不正确的,因为 6 月只有 30 天(似乎输出的是 7 月的天数)。date('Y-m-d H:i:s', strtotime('next month'));
,给出下个月的时间戳格式,返回 '2012-07-01 14:59:19'
,但我希望得到以下结果:'2012-06-30 14:59:19'
.所以我尝试了一些代码,这是我的实验,使用 date()
, strtotime()
和 DateTime class
: http://pastebin.com/3iaH4iSZ
输出如下所示 ( you can also see it here! ):
这些是 PHP 错误,还是我误解了什么?
我希望得到与使用 MySQL 的日期函数时相同的结果,仅举几个例子:
SELECT NOW( )
2012-05-31 17:51:15
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH)
2012-06-30 17:51:15
SELECT DATE_ADD( '2013-01-30 17:51:15', INTERVAL 1 MONTH )
2013-02-28 17:51:15
SELECT DATE_ADD( '2013-01-31 17:51:15', INTERVAL 1 MONTH )
2013-02-28 17:51:15
最佳答案
好的,我想我找到了解决方案,它的行为类似于 MySQL 的 DATE_ADD
函数和 INTERNAL 1 MONTH
。
我用所有可能有问题的情况测试了我的功能,它似乎工作正常。
我把它贴在这里,也许有人会觉得它有用。我在这段代码中添加了一些注释,所以我认为它已经足够清楚了。
该函数称为 getOneMonthLaterTimestamp
。一个例子:
echo getOneMonthLaterTimestamp('2012-05-31 17:51:15');
输出:2012-06-30 17:51:15
/**
* Test function for dumping variables in a readable way
*
* @param mixed $stuff
* @param string $text
* @return string
*/
function my_var_export($stuff, $text = '...') {
return '<p>' . $text . ' (' . gettype($stuff) . '):</p><pre>' . var_export($stuff, TRUE) . '</pre>';
}
/**
* Get timestamp format of the date one month later
* than the date given in the argument/current date if left empty.
*
* Behaves similar to MySQL's DATE_ADD function with INTERVAL 1 MONTH:
* SELECT DATE_ADD('2012-05-31 17:51:15', INTERVAL 1 MONTH)
* --> 2012-06-30 17:51:15
* SELECT DATE_ADD('2013-01-30 17:51:15', INTERVAL 1 MONTH )
* --> 2013-02-28 17:51:15
*
* these are equivalent to:
* echo getOneMonthLaterTimestamp('2012-05-31 17:51:15');
* echo getOneMonthLaterTimestamp('2013-01-30 17:51:15');
*
* You can also call it without an argument. This way, the current date is taken as a basis.
* echo getOneMonthLaterTimestamp();
*
* @param string $DateTime_param date/time string
* @see http://www.php.net/manual/en/datetime.formats.php
* @see http://www.php.net/manual/en/datetime.construct.php
*
* @return string Date one month later as a MySQL-compatible timestamp format
*/
function getOneMonthLaterTimestamp($DateTime_param = NULL) {
// if argument is left empty, the current date is taken as a basis
if (empty($DateTime_param)) {
$DateTime_param = date('Y-m-d H:i:s');
}
$lastDayOfNextMonth = new DateTime($DateTime_param);
$lastDayOfNextMonth->modify('last day of next month');
$nextMonth = new DateTime($DateTime_param);
$nextMonth->modify('next month');
if ($lastDayOfNextMonth->format('n') < $nextMonth->format('n')) {
$oneMonthLaterTimestamp = $lastDayOfNextMonth->format('Y-m-d H:i:s');
}
else {
$oneMonthLaterTimestamp = $nextMonth->format('Y-m-d H:i:s');
}
return $oneMonthLaterTimestamp;
}
$timestamps_to_test_array = array(
date('Y-m-d H:i:s'), // 1. current date
'2011-01-28 23:59:59', // 2.
'2011-01-29 23:59:59', // 3.
'2011-01-30 23:59:59', // 4.
'2011-01-31 23:59:59', // 5.
'2012-01-28 23:59:59', // 6.
'2012-01-29 23:59:59', // 7.
'2012-01-30 23:59:59', // 8.
'2012-01-31 23:59:59', // 9.
'2012-02-29 23:59:59', // 10.
'2012-03-30 23:59:59', // 11.
'2012-03-31 23:59:59', // 12.
'2012-04-30 23:59:59', // 13.
'2012-05-31 23:59:59', // 14.
'2012-12-31 23:59:59', // 15.
'2013-01-31 23:59:59', // 16.
'2013-02-28 23:59:59', // 17.
);
$i = 1;
foreach ($timestamps_to_test_array as $timestamp_to_test) {
$oneMonthLaterTimestamp = getOneMonthLaterTimestamp($timestamp_to_test);
echo my_var_export($timestamp_to_test, '[' . $i . ']. Timestamp to test ($timestamp_to_test)');
echo my_var_export($oneMonthLaterTimestamp, 'Timestamp + 1 month (getOneMonthLaterTimestamp($timestamp_to_test))');
echo '<hr />';
$i++;
}
我将输出粘贴在这里:http://pastebin.com/rY5ZRBs9 .
这是它的屏幕截图:http://i.imgur.com/KwlJq.png
/**
* Get number of days in the next month
*
* @param string $DateTime_param date/time string
* @return int Number of days in the next month
*/
function getNumberOfDaysInNextMonth($DateTime_param = NULL) {
// if argument is empty, the current date is taken as a basis
if (empty($DateTime_param)) {
$DateTime_param = date('Y-m-d H:i:s');
}
// DateTime instance
$dateCurrent = new DateTime($DateTime_param);
$dateCurrent->modify('last day of next month');
return (int)$dateCurrent->format('t');
}
/**
* It's identical to getNumberOfDaysInNextMonth()
*
* @see getNumberOfDaysInNextMonth
*/
function getLastDayOfNextMonth($DateTime_param = NULL) {
return getNumberOfDaysInNextMonth($DateTime_param);
}
$lastDayOfNextMonth = getLastDayOfNextMonth('2012-05-31 03:50:27');
echo my_var_export($lastDayOfNextMonth, "Get last day of next month (getLastDayOfNextMonth('2012-05-31 03:50:27'))");
输出:
Get last day of next month (getLastDayOfNextMonth('2012-05-31 03:50:27')) (integer):
30
关于PHP:与下个月相关的日期函数结果不正确(PHP 错误或 sg.else?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834350/
第一段代码工作正常,并给出了我需要的结果。我现在想做的是让它在 'as num' 上返回 3 个数字值对于“as num”上的 3 个不同值,对于同一列上的 3 个不同位置 SELEC
我想分析一些数据以编写定价算法。以下日期可用: 我需要三个变量/维度的函数/相关因子,它显示三个维度(pers_capacity、卧室数量、浴室数量)增长时中位数(价格)的变化。例如Y(#pers_c
正如标题所说 - 我的 Sprite Kit 游戏时不时地在后台崩溃,总是出现此错误 - Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Sub
假设我尝试保存以下数据,并且Songs模型的name属性上设置了Phalcon \ Mvc \ Model \ Validator \ PresenceOf验证器 // Get an existing
我有一个 if 控件,如下所示; if (Directory.Exists(System.IO.Path.Combine(systemPath, "Reports", companyName))
有人可以告诉我我们使用 ReadLine() 从文件 (.txt) 中读取特定行吗?现在我想读取文件的全部内容(不仅仅是第一行)。为此我需要使用什么方法。我用谷歌搜索了很多,但找不到解决方案。 我的代
我相信在大学时我用从 C 派生的语言为 FPGA 编写了一个程序。我了解 VHDL 和 verilog 等语言。但是,我不明白的是程序员在使用哪个方面有多少选择?它依赖于FPGA吗?我将使用 Xili
我有一个 if 控件,如下所示; if (Directory.Exists(System.IO.Path.Combine(systemPath, "Reports", companyName))
如何在运行时更改 Dashcode (Javascript) 中图像对象的源? 我试过: var image = document.getElementById("image").object;ima
我有几个相互关联的类,它们将被多种不同的算法使用 例子: struct B; struct A { B* parent; }; struct B { std::vector child
我正在开发一个网站,用户在客户收到的表中输入金额,如果任何客户没有提供分期付款(金额),则用户不会在表中输入任何金额,并且用户希望获取违约者的信息客户以10天为基础。所以我的问题是应该定义什么表和属性
我试图从上一个条目中选择一个值,并每次将该数字加一。我让它工作到选择当前条目值(默认 1000)并递增 1 并重新插入该值(因此每次最终都是 1001)。我需要它来选择该字段的最后一个条目,这样它将变
我不擅长“制作”查询。假设这是我的数据库: artist pics ------------------- -
最近,我要为我的网站做一个即时通知系统。我听说 COMET 在这种情况下必不可少。 我已经搜索 PHP 和 Comet 一段时间了,但是,我发现的指南和文章似乎只是循环中的 ajax 请求。例如,有一
我正在开发一款 iOS 游戏,我希望 clown 在场景外生成,然后向下移动。我的想法是全部创建它们,并将它们以 360 像素的距离放置在不可见的场景中。 像这样: SKSpriteNode *clo
我有以下子订单表。 mysql> select * from suborder; +-------------+------------------+ | order_state | bookin
这可能是一个有点初学者的问题,但考虑到在 Java 中调试编码是相当相关的:什么时候编码与 String 对象相关? 假设我有一个要保存到文件中的字符串对象。 String 对象本身是否使用某种我应该
首先我想说我是 CPP 的新手(我从 cpp11 开始):)考虑以下实体:学生(名字+姓氏)和组(描述+更多学生)。我在 C++ 中创建了以下 2 个类: class Student { privat
我正在尝试在单击该复选框时同步更新我的数据库。我决定使用 aJax,但它似乎无法识别 ajax。 代码:将成为 Switch_Active(this.id) 函数的元素 ... Deactivat
我正在创建一个菜单。菜单如下。 $('.category').mouseover(function() { $(this).removeClass('category').addClass('cate
我是一名优秀的程序员,十分优秀!