I'm using a custom form, but no custom validators.
Do you need some additional information?

Cheers,
David


On 11 October 2012 15:34, Massimo Di Pierro <[email protected]>wrote:

> Is it possible you have a custom validator?
>
> is should have a IS_DATE validator (default). It is the validator that
> maps request.vars.date into form.vars.date and performs the conversion.
>
>
> On Thursday, 11 October 2012 06:30:46 UTC-5, David Sorrentino wrote:
>
>> Changed the name of the field from "date" to "created_on" to avoid
>> confusion.
>> Tried with a fresh table.
>> Result:
>> *form.vars.created_on* seems to be still an object of type str.
>>
>> Am I missing something? :-/
>>
>> Cheers,
>> David
>>
>>
>> On 11 October 2012 11:45, Niphlod <[email protected]> wrote:
>>
>>> uhm. I can't reproduce the issue. For me form.vars.whatever if is a
>>> field of type datetime is a datetime tuple. Request.vars.whatever on the
>>> other hand is always a string, as it should be.
>>>
>>> Try with a fresh table
>>>
>>> PS: having a db with a column named "date" is a call for problems ...
>>>
>>> On Thursday, October 11, 2012 11:27:52 AM UTC+2, David Sorrentino wrote:
>>>
>>>> Thanks for your explanation Niphlod. ;)
>>>>
>>>> I'm trying to normalize the time, as you suggested.
>>>> However I'm facing some difficulties.
>>>>
>>>> In particular I created an additional field in my table to store the
>>>> normalized time (UTC) too. So now my table looks like that:
>>>>
>>>>> db.define_table('news',
>>>>>     Field('title', 'string'),
>>>>>     Field('body', 'text'),
>>>>>     Field('date', 'datetime'),
>>>>>     Field('dateUTC', 'datetime', readable=False, writable=False)
>>>>> )
>>>>>
>>>>
>>>> I decided to compute the field "dateUTC" onvalidation. My controller
>>>> looks like that:
>>>>
>>>>> def insertnews():
>>>>>     form = crud.create(db.news, next=URL('index'),
>>>>> onvalidation=localtime_to_utc)
>>>>>     return dict(form=form)
>>>>>
>>>>
>>>> Eventually, assuming that I want to normalize the local time of Rome
>>>> (+2 hours) the function I use to do that looks so:
>>>>
>>>>> def localtime_to_utc(form):
>>>>>         form.vars.dateUTC = form.vars.date - timedelta(hours=2)
>>>>>
>>>>
>>>> The problem is that *form.vars.date* seems to be a string. O_O
>>>> Indeed I get this error:
>>>>
>>>>> TypeError: unsupported operand type(s) for -: 'str' and
>>>>> 'datetime.timedelta'
>>>>>
>>>>
>>>>  Now I wonder, is it normal that a form.vars is considered a string? Is
>>>> there any way to retrieve the original type (datetime), in order to compute
>>>> the normalization?
>>>>
>>>> @Alec: if I manage I'll send them a mail with the solution! ;)
>>>>
>>>> Cheers,
>>>> David
>>>>
>>>>
>>>> On 10 October 2012 14:35, Alec Taylor <[email protected]> wrote:
>>>>
>>>>> Also if it makes you feel better LinkedIn hasn't implemented this
>>>>> properly either :P
>>>>>
>>>>> On Wed, Oct 10, 2012 at 10:57 PM, Niphlod <[email protected]> wrote:
>>>>> > welcome to datetime madness :D It's exactly what you need to take
>>>>> into
>>>>> > consideration if you're working with user-inputted datetimes. You'd
>>>>> need to
>>>>> > retrieve it's local date (javascript comes to the rescue, or based on
>>>>> > nation, or whatever) and calculate the difference between that and
>>>>> your
>>>>> > current date, then subtract/add the difference to the actually
>>>>> submitted
>>>>> > datetime to "normalize" it in a UTC form.
>>>>> >
>>>>> >
>>>>> > On Wednesday, October 10, 2012 1:01:35 PM UTC+2, David Sorrentino
>>>>> wrote:
>>>>> >>
>>>>> >> I see your point, but what if the user inserts into the datetime
>>>>> input
>>>>> >> field his/her current time? It will be different from the server's
>>>>> one
>>>>> >> (which I set to GMT), and prettydate will not work properly.
>>>>> >>
>>>>> >> I confess that I am a bit confused about that.
>>>>> >>
>>>>> >> Best,
>>>>> >> David
>>>>> >>
>>>>> >>
>>>>> >> On 10 October 2012 11:16, Niphlod <[email protected]> wrote:
>>>>> >>>
>>>>> >>> not necessarily wrong, just a different timezone. If you're going
>>>>> to
>>>>> >>> display "prettydates" just in the browser for a "nicer
>>>>> visualization" you
>>>>> >>> should take into consideration that your server's locatime can be
>>>>> different
>>>>> >>> from the users's browser one.
>>>>> >>>
>>>>> >>> In a "perfect" setup, your server is on GMT (that is, utc), your
>>>>> app uses
>>>>> >>> request.utcnow in all the places instead of request.now (and
>>>>> >>> datetime.datetime.utcnow() instead of datetime.datetime.utcnow()).
>>>>> You'll
>>>>> >>> have prettydate working right.
>>>>> >>>
>>>>> >>>
>>>>> >>> On Wednesday, October 10, 2012 10:38:32 AM UTC+2, David Sorrentino
>>>>> wrote:
>>>>> >>>>
>>>>> >>>> Hey Niphlod,
>>>>> >>>>
>>>>> >>>> Thank you for your help.
>>>>> >>>>
>>>>> >>>> The version is 2.0.9 (2012-10-05 09:01:45) dev
>>>>> >>>>
>>>>> >>>> I tried datetime.datetime.now() in my application and I just
>>>>> discovered
>>>>> >>>> that it is 2 hours late. This explains why prettydate is then 2
>>>>> hours in
>>>>> >>>> hurry!
>>>>> >>>> The odd thing is that if I open a python console and try
>>>>> >>>> datetime.datetime.now(), I get the right time. O_O
>>>>> >>>>
>>>>> >>>> Something wrong with my server?
>>>>> >>>>
>>>>> >>>> Cheers,
>>>>> >>>> David
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> On 10 October 2012 10:28, Niphlod <[email protected]> wrote:
>>>>> >>>>>
>>>>> >>>>> should calculate the difference between datetime.datetime.now()
>>>>> and
>>>>> >>>>> your date. what web2py version are you using ?
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> On Wednesday, October 10, 2012 10:16:24 AM UTC+2, David
>>>>> Sorrentino
>>>>> >>>>> wrote:
>>>>> >>>>>>
>>>>> >>>>>> Hello everybody,
>>>>> >>>>>>
>>>>> >>>>>> I am using the module prettydate, but it seems that it matches
>>>>> the
>>>>> >>>>>> datetime I give as input with a wrong timezone.
>>>>> >>>>>>
>>>>> >>>>>> For example now it's 10:12 am at my place.
>>>>> >>>>>>
>>>>> >>>>>> This is the datetime I give as input: 2012-10-10 10:12:00.
>>>>> >>>>>>
>>>>> >>>>>> This is the code:
>>>>> >>>>>>
>>>>> >>>>>>> from gluon.tools import prettydate
>>>>> >>>>>>> pretty_d = prettydate(input_datetime, T)
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>>> And this is the result: "2 hours from now".
>>>>> >>>>>> It's 2 hours in hurry!! :)
>>>>> >>>>>>
>>>>> >>>>>> Am I wrong in something?
>>>>> >>>>>>
>>>>> >>>>>> I wish you a wonderful Wednesday,
>>>>> >>>>>> David
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>> --
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>
>>>>> >>>>
>>>>> >>> --
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>> >>
>>>>> >>
>>>>> > --
>>>>> >
>>>>> >
>>>>> >
>>>>>
>>>>> --
>>>>>
>>>>>
>>>>>
>>>>>
>>>>  --
>>>
>>>
>>>
>>>
>>
>>  --
>
>
>
>

-- 



Reply via email to