|
|
|
| mktime() не делает. а мы не знаем ни дня ни месяца! как занести только год? | |
|
|
|
|
|
|
|
для: elenaki
(02.05.2008 в 11:37)
| | > mktime() не делает
Делает вообще-то.
<?php
echo date('Y', mktime(0, 0, 0, 1, 1, 1995)); // 1995
?>
|
> дата типа 1995-00-00
Она такая в базе?
> как занести только год?
Хм...Так unix timestamp или год? | |
|
|
|
|
|
|
|
для: Atheist
(02.05.2008 в 11:53)
| | есть такой скриптик. я им всегда даты проверяю.
<?
function date_to_timestamp ($date)
{
$split_date = split ('-', $date);
$timestamp = mktime ($split_date[3], $split_date[4], $split_date[5], $split_date[1], $split_date[2], $split_date[0]);
return $timestamp;
}
function timestamp_to_date ($timestamp)
{
$date = date ("d/m/Y - H:i:s" , $timestamp);
return $date;
}
function form_dati ()
{
?>
<table>
<tr>
<td width="50%">
</td>
<td width="50%">
<form method="post" action="unixdate.php">
Convert form Normal to Unix <input checked type="radio" name="modo" value="unix"><br>
<input type="text" class="color" name="giorno" size="10" maxlength="2"> Day (dd)<br>
<input type="text" class="color" name="mese" size="10" maxlength="2"> Month (mm)<br>
<input type="text" class="color" name="anno" size="10" maxlength="4"> Year (yyyy)<br>
<input type="text" class="color" name="ora" size="10" maxlength="2"> Hour (24)<br>
<input type="text" class="color" name="min" size="10" maxlength="2"> Minutes<br>
<input type="text" class="color" name="sec" size="10" maxlength="2"> Seconds<br><br>
Convert from Unix to Normal <input type="radio" name="modo" value="normale"><br>
<input type="text" class="color" name="unixmode" size="10"> Unix Date<br><br>
<center><input type="submit" class="color" value="Submit"></center>
</form>
</td>
</tr>
</table>
<br><br>
<?
}
?>
<html>
<head>
<title>Unix date Converter</title>
</head>
<style>
input.color {
background-color: #99CCFF;
font-family: arial;
font-size: 11px;
color: #000000;
border: 1 solid #000000;
height: 18px;
}
</style>
<body text="black" bgcolor="white">
<center><h1>Unix Date Converter</h1></center><p> </p>
<?
echo mktime(0, 0, 0, 1, 1, 1995);
if ($_POST["modo"] == "")
{
form_dati();
}
if ($_POST["modo"] == "unix")
{
form_dati();
$date = $_POST["anno"]."-".$_POST["mese"]."-".$_POST["giorno"]."-".$_POST["ora"]."-".$_POST["min"]."-".$_POST["sec"];
$timestamp = date_to_timestamp($date);
echo "<center><b>$date Unix date: $timestamp</b></center>";
$modo = "";
}
if ($_POST["modo"] == "normale")
{
form_dati();
$date = timestamp_to_date($_POST["unixmode"]);
echo "<center><b>$unixmode, Normal date: $date</b> (dd/mm/yyyy - hh:mm) </center>";
$modo = "";
}
?>
|
он выдает это. 788911200, Normal date: 01/01/1995 - 00:00:00 (dd/mm/yyyy - hh:mm)
а надо БЕЗ дня и месяца, они неизвестны...
наверно, придется держать в разных полях года, месяцы и дни. | |
|
|
|
|
|
|
|
для: elenaki
(02.05.2008 в 12:01)
| | >он выдает это. 788911200, Normal date: 01/01/1995 - 00:00:00 (dd/mm/yyyy - hh:mm)
>а надо БЕЗ дня и месяца, они неизвестны...
timestamp - линейное представление времени.
За моментом 31/12/1994 - 23:59:59 сразу же без пропусков следует момент 01/01/1995 - 00:00:00
первый представляет собой 788911199-ю секунду (считая для от известного момента для Вашей зоны)
второй - соответственно - 788911200-ю секунду.
Момента 00/00/1995 физически не существует ( и не существовало) - значит и значения timestamp такого быть не может.
>наверно, придется держать в разных полях года, месяцы и дни.
Можно так.
Вы можете также пожертвовать одну из секунд года для такой цели,
определив что, к примеру, 01/01/XXXX - 00:00:00 будет означать не первую секунду года ХХХХ, а любой неопределенный момент в году ХХХХ. | |
|
|
|
|
|
|
|
для: elenaki
(02.05.2008 в 12:01)
| | > split
Тут лучше применять explode
> а надо БЕЗ дня и месяца
Заменить
> $date = timestamp_to_date($_POST["unixmode"]);
На
> $date = date('Y', $_POST["unixmode"]); | |
|
|
|
|
|
|
|
для: Atheist
(02.05.2008 в 14:37)
| | это не мой скрипт, я им пользуюсь только но локальном компе и менять ничего В НЕМ не собираюсь. | |
|
|
|
|
|
|
|
для: elenaki
(02.05.2008 в 18:03)
| | Извиняюсь, неправильно понял, конечно. Меня всё-таки смутил скрипт - не понял к чему он тут.
Нужно чтобы если указывался год, то и показывать только год при выводе "нормальной" даты? Тогда да, оптимальный выход только в разделении даты на несколько полей. Причем, если в поле, например, "00" - то это неизвестная компонента даты (месяц или день).
Либо если пользоваться советом Trianon'а и если я правильно его понял, то нужно еще добавить поле, в котором будет указываться что известно. В данном случае - год. Например, это поле может принимать такие значения: известен год - 0, месяц - 1, день - 2. По этим трём значениям можно однозначно определить формат даты, так как случаи вроде "известен год и день, но неизвестен месяц" - бессмысленны.
P.S.
> менять ничего В НЕМ не собираюсь
> echo mktime(0, 0, 0, 1, 1, 1995); // Это явно внесенное изменение :) | |
|
|
|
|
|
|
|
для: Atheist
(02.05.2008 в 22:39)
| | >...нужно еще добавить поле, в котором будет указываться что известно.
>В данном случае - год. Например, это поле может принимать такие значения:
>известен год - 0, месяц - 1, день - 2.
>По этим трём значениям можно однозначно определить формат даты, так как
>случаи вроде "известен год и день, но неизвестен месяц" - бессмысленны.
Это уже третий способ решить проблему. Но он, как и тот, что предложила elenaki, требует внесения изменений в схему БД, хотя и не таких кардинальных.
То, что предложил я, может оказаться полезным, когда по условиям вносить изменения в таблицы нельзя вообще. Если допустить, что в первую секунду года события возникать не могут (либо могут быть без вреда переписаны на вторую секунду (т.е. на XXXX-01-01 00:00:01), то можно внести изменения в скрипт , чтоб тот такие значения как XXXX-01-01 00:00:00 представлял как ситуацию "известен только год".
Конечно, совсем не корректируя скрипты, изменить логику работы не получится :) | |
|
|
|
|
|
|
|
для: Atheist
(02.05.2008 в 22:39)
| | Это явно внесенное изменение - нужно же было как-то получить метку, чтобы вставить ее в поле. и на работу скрипта этот вывод никак не влияет. | |
|
|
|