X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fdatetime.php;h=efcfa0a177eb8319e8feb6cd64033962efea333d;hb=59ace4f4d7413f76c59e57e88047f6c8e3580c82;hp=a056eaa60e34492158f09fc4bd19d29869655a17;hpb=f4a1820110e6c85f91c7a3dbdada35f76be83f36;p=friendica.git
diff --git a/include/datetime.php b/include/datetime.php
index a056eaa60e..efcfa0a177 100644
--- a/include/datetime.php
+++ b/include/datetime.php
@@ -15,7 +15,6 @@ function timezone_cmp($a, $b) {
}}
// emit a timezone selector grouped (primarily) by continent
-
if(! function_exists('select_timezone')) {
function select_timezone($current = 'America/Los_Angeles') {
@@ -55,6 +54,23 @@ function select_timezone($current = 'America/Los_Angeles') {
return $o;
}}
+// return a select using 'field_select_raw' template, with timezones
+// groupped (primarily) by continent
+// arguments follow convetion as other field_* template array:
+// 'name', 'label', $value, 'help'
+if (!function_exists('field_timezone')){
+function field_timezone($name='timezone', $label='', $current = 'America/Los_Angeles', $help){
+ $options = select_timezone($current);
+ $options = str_replace('','', $options);
+
+ $tpl = get_markup_template('field_select_raw.tpl');
+ return replace_macros($tpl, array(
+ '$field' => array($name, $label, $current, $help, $options),
+ ));
+
+}}
+
// General purpose date parse/convert function.
// $from = source timezone
// $to = dest timezone
@@ -64,6 +80,16 @@ function select_timezone($current = 'America/Los_Angeles') {
if(! function_exists('datetime_convert')) {
function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d H:i:s") {
+ // Defaults to UTC if nothing is set, but throws an exception if set to empty string.
+ // Provide some sane defaults regardless.
+
+ if($from === '')
+ $from = 'UTC';
+ if($to === '')
+ $to = 'UTC';
+ if( ($s === '') || (! is_string($s)) )
+ $s = 'now';
+
// Slight hackish adjustment so that 'zero' datetime actually returns what is intended
// otherwise we end up with -0001-11-30 ...
// add 32 days so that we at least get year 00, and then hack around the fact that
@@ -74,22 +100,79 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d
return str_replace('1','0',$d->format($fmt));
}
- $d = new DateTime($s, new DateTimeZone($from));
- $d->setTimeZone(new DateTimeZone($to));
+ try {
+ $from_obj = new DateTimeZone($from);
+ }
+ catch(Exception $e) {
+ $from_obj = new DateTimeZone('UTC');
+ }
+
+ try {
+ $d = new DateTime($s, $from_obj);
+ }
+ catch(Exception $e) {
+ logger('datetime_convert: exception: ' . $e->getMessage());
+ $d = new DateTime('now', $from_obj);
+ }
+
+ try {
+ $to_obj = new DateTimeZone($to);
+ }
+ catch(Exception $e) {
+ $to_obj = new DateTimeZone('UTC');
+ }
+
+ $d->setTimeZone($to_obj);
return($d->format($fmt));
}}
+
// wrapper for date selector, tailored for use in birthday fields
function dob($dob) {
list($year,$month,$day) = sscanf($dob,'%4d-%2d-%2d');
$y = datetime_convert('UTC',date_default_timezone_get(),'now','Y');
- $o = datesel('',1920,$y,true,$year,$month,$day);
+ $f = get_config('system','birthday_input_format');
+ if(! $f)
+ $f = 'ymd';
+ $o = datesel($f,'',1920,$y,true,$year,$month,$day);
+ return $o;
+}
+
+
+function datesel_format($f) {
+
+ $o = '';
+
+ if(strlen($f)) {
+ for($x = 0; $x < strlen($f); $x ++) {
+ switch($f[$x]) {
+ case 'y':
+ if(strlen($o))
+ $o .= '-';
+ $o .= t('year');
+ break;
+ case 'm':
+ if(strlen($o))
+ $o .= '-';
+ $o .= t('month');
+ break;
+ case 'd':
+ if(strlen($o))
+ $o .= '-';
+ $o .= t('day');
+ break;
+ default:
+ break;
+ }
+ }
+ }
return $o;
}
// returns a date selector.
+// $f = format string, e.g. 'ymd' or 'mdy'
// $pre = prefix (if needed) for HTML name and class fields
// $ymin = first year shown in selector dropdown
// $ymax = last year shown in selector dropdown
@@ -99,40 +182,52 @@ function dob($dob) {
// $d = already selected day
if(! function_exists('datesel')) {
-function datesel($pre,$ymin,$ymax,$allow_blank,$y,$m,$d) {
+function datesel($f,$pre,$ymin,$ymax,$allow_blank,$y,$m,$d) {
$o = '';
- $o .= "